Access Modifiers (Specifiers) ใน C# พร้อมตัวอย่างโปรแกรม

⚡ สรุปอย่างชาญฉลาด

ตัวแก้ไขการเข้าถึง (Access modifiers) ใน C# คือคำหลักที่ใช้กำหนดระดับการมองเห็นของคลาส คุณสมบัติ หรือเมธอด เพื่อจำกัดว่าโปรแกรมภายนอกใดบ้างที่สามารถเข้าถึงได้ ส่วนคอนสตรัคเตอร์จะกำหนดค่าเริ่มต้นให้กับฟิลด์โดยอัตโนมัติทุกครั้งที่มีการสร้างอ็อบเจ็กต์ของคลาส

  • 🔐 ส่วนตัว: ตัวแก้ไขการเข้าถึงแบบส่วนตัวจะจำกัดสมาชิกให้อยู่ในคลาสเดียวกันเท่านั้น โดยจะบล็อกการเข้าถึงจากโปรแกรมภายนอกใดๆ
  • 🌐 สาธารณะ: ตัวแก้ไขการเข้าถึงสาธารณะจะเปิดเผยคุณสมบัติหรือวิธีการให้กับโปรแกรมภายนอกใดๆ ก็ได้โดยไม่มีข้อจำกัด
  • 🛡️ มีการป้องกัน: ตัวแก้ไขการเข้าถึงแบบป้องกันจะแชร์สมาชิกเฉพาะกับคลาสที่สืบทอดมาจากคลาสปัจจุบันเท่านั้น
  • 📦 ภายใน: ตัวแก้ไขการเข้าถึงภายในอนุญาตให้เข้าถึงภายในแอสเซมบลีเดียวกัน แต่ไม่สามารถเข้าถึงได้จากโปรแกรมภายนอก
  • 🏗️ ผู้สร้าง: คอนสตรัคเตอร์ใช้ชื่อคลาสเดียวกัน ไม่รับค่าส่งคืน และจะกำหนดค่าเริ่มต้นให้กับฟิลด์ต่างๆ เมื่อมีการสร้างอ็อบเจ็กต์
  • 🤖 ความช่วยเหลือจากเอไอ: GitHub Copilot สร้างโครงสร้างสำหรับตัวแก้ไขและตัวสร้าง ในขณะที่ ML.NET แมปคุณสมบัติของคลาสกับคุณลักษณะของโมเดล

ตัวแก้ไขการเข้าถึง (ตัวระบุ) ในภาษา C#

Access Modifier (ตัวระบุ) ใน C # คืออะไร

ตัวแก้ไขการเข้าถึง ตัวกำหนดการเข้าถึง (Access Specifiers) ในภาษา C# คือคำหลักที่ใช้กำหนดการมองเห็นของคุณสมบัติหรือเมธอดของคลาส โดยใช้เมื่อคุณไม่ต้องการให้โปรแกรมอื่นมองเห็นคุณสมบัติหรือเมธอดของคลาส ตัวกำหนดการเข้าถึงจะจำกัดการเข้าถึงเพื่อให้โปรแกรมอื่นไม่สามารถมองเห็นคุณสมบัติหรือเมธอดของคลาสได้

ตัวแก้ไขการเข้าถึงมี 6 ประเภทใน C#:

  • Private
  • สาธารณะ
  • มีการป้องกัน
  • ภายใน
  • ป้องกันภายใน
  • ได้รับการคุ้มครองส่วนตัว

เราจะเรียนรู้เกี่ยวกับตัวแก้ไขการเข้าถึงหลักใน C# พร้อมตัวอย่างโปรแกรมตามที่อธิบายไว้ด้านล่าง

ตัวแก้ไขการเข้าถึงส่วนตัวใน C #

เมื่อแนบตัวแก้ไขการเข้าถึงส่วนตัวกับคุณสมบัติหรือวิธีการ หมายความว่าสมาชิกเหล่านั้นไม่สามารถเข้าถึงได้จากโปรแกรมภายนอกใดๆ

ตัวอย่างตัวแก้ไขการเข้าถึงส่วนตัว

ลองยกตัวอย่างและดูว่าเกิดอะไรขึ้นเมื่อเราใช้ตัวแก้ไขการเข้าถึงส่วนตัว

มาแก้ไขโค้ดปัจจุบันในไฟล์ Tutorial.cs ของเรากัน ในวิธี SetTutorial เราจะเปลี่ยนคำสำคัญสาธารณะเป็นส่วนตัว

ตัวดัดแปลงการเข้าถึงส่วนตัว

ตอนนี้เรามาสลับไปใช้ไฟล์ Program.cs ของเรากันดีกว่า คุณจะสังเกตเห็นว่ามีเส้นหยักสีแดงอยู่ใต้วิธี SetTutorial

เนื่องจากเราได้ประกาศเมธอด SetTutorial เป็นแบบส่วนตัวในคลาส Tutorial แล้ว Visual Studio จึงตรวจพบสิ่งนี้ และได้แจ้งผู้ใช้โดยไฮไลต์ว่าเมธอดนี้จะใช้งานจากไฟล์ Program.cs ไม่ได้

ตัวแก้ไขการเข้าถึงส่วนตัว

ตัวดัดแปลงการเข้าถึงสาธารณะ C #

เมื่อแนบตัวแก้ไขการเข้าถึงแบบสาธารณะกับคุณสมบัติหรือวิธีการ หมายความว่าสมาชิกเหล่านั้นสามารถเข้าถึงได้จากโปรแกรมภายนอกใดๆ เราได้เห็นสิ่งนี้แล้วในตัวอย่างก่อนหน้านี้ของเรา

ตัวอย่างตัวแก้ไขการเข้าถึงสาธารณะ

ตัวดัดแปลงการเข้าถึงสาธารณะ C #

เนื่องจากเราได้กำหนดวิธีการของเราเป็นแบบสาธารณะในคลาส Tutorial จึงสามารถเข้าถึงได้จากไฟล์ Program.cs

ตัวแก้ไขการเข้าถึงที่ได้รับการป้องกันใน C #

เมื่อตัวแก้ไขการเข้าถึงที่ได้รับการป้องกันถูกแนบไปกับคุณสมบัติหรือวิธีการ หมายความว่าสมาชิกเหล่านั้นสามารถเข้าถึงได้โดยเท่านั้น คลาสที่สืบทอดมา จากปัจจุบัน ชั้น- เราจะอธิบายรายละเอียดเพิ่มเติมในคลาส Inheritance

ตัวดัดแปลงการเข้าถึงภายใน C #

เมื่อมีการแนบตัวแก้ไขการเข้าถึงภายในกับคุณสมบัติหรือวิธีการ สมาชิกเหล่านั้นสามารถเข้าถึงได้โดยโปรแกรมภายในเท่านั้น แต่ไม่สามารถเข้าถึงได้โดยโปรแกรมภายนอก

ตัวสร้าง C#

C# ตัวสร้างใช้ในการเริ่มต้นค่าของฟิลด์คลาสเมื่อวัตถุที่เกี่ยวข้องถูกสร้างขึ้น Constructor คือ method ที่มีชื่อเดียวกับ class หากมีการกำหนด Constructor ในคลาส มันจะจัดเตรียมเมธอดแรกซึ่งจะถูกเรียกเมื่อสร้างอ็อบเจ็กต์ สมมติว่าเรามีคลาสที่เรียกว่า Employee วิธีการสร้างก็จะตั้งชื่อเป็น Employee()

สิ่งสำคัญต่อไปนี้จำเป็นต้องสังเกตเกี่ยวกับวิธีการสร้าง

  1. ตัวแก้ไขการเข้าถึงเริ่มต้นของ C# สำหรับตัวสร้างจำเป็นต้องทำให้เป็นสาธารณะ
  2. ไม่ควรมีประเภทการส่งคืนสำหรับวิธีคอนสตรัคเตอร์

ตัวอย่างของตัวสร้าง C#

ตอนนี้เรามาดูกันว่าเราจะรวมผู้ใช้ Constructor เข้ากับโค้ดของเราได้อย่างไร เราจะใช้ตัวสร้างเพื่อเริ่มต้นฟิลด์ TutorialID และ TutorialName เป็นค่าเริ่มต้นบางค่าเมื่อวัตถุถูกสร้างขึ้น

ขั้นตอน 1) ขั้นตอนแรกคือการสร้าง Constructor สำหรับคลาส Tutorial ของเรา ในขั้นตอนนี้ เราจะเพิ่มโค้ดด้านล่างลงในไฟล์ Tutorial.cs

ตัวสร้าง C#

Code คำอธิบาย:-

  1. ก่อนอื่นเราเพิ่มวิธีการใหม่ซึ่งมีชื่อเดียวกันกับคลาส เนื่องจากเป็นชื่อเดียวกันกับคลาส C# จึงถือว่าสิ่งนี้เป็นเมธอดคอนสตรัคเตอร์ ดังนั้นเมื่อใดก็ตามที่เมธอดการเรียกสร้างอ็อบเจ็กต์ของคลาสนี้ เมธอดนี้จะถูกเรียกตามค่าเริ่มต้น
  2. ใน Tutorial Constructor เรากำลังตั้งค่าของ TutorialID เป็น 0 และ TutorialName เป็น "Default" ดังนั้นเมื่อใดก็ตามที่วัตถุถูกสร้างขึ้น ฟิลด์เหล่านี้จะมีค่าเริ่มต้นเหล่านี้เสมอ

ตอนนี้เรามาสลับไปที่ไฟล์ Program.cs ของเราแล้วลบบรรทัดซึ่งเรียกเมธอด SetTutorial ออก เนื่องจากเราต้องการเพียงดูว่า Constructor ทำงานอย่างไร

ตัวสร้าง C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Tutorial
 {
  public int TutorialID; 
  public string TutorialName;
  
  public Tutorial()
  {
   TutorialID=0;
   TutorialName="Default";
  }
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  public String GetTutorial()
  {
   return TutorialName;
  }
  
  static void Main(string[] args) 
  {
   Tutorial pTutor=new Tutorial();
    
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code คำอธิบาย:-

  1. ขั้นตอนแรกคือการสร้างออบเจ็กต์สำหรับคลาส Tutorial ซึ่งทำได้โดยใช้คำสำคัญ 'ใหม่'
  2. เราใช้เมธอด GetTutorial ของคลาส Tutorial เพื่อรับค่า TutorialName จากนั้นจะแสดงค่านี้ไปยังคอนโซลผ่านเมธอด Console.WriteLine

หากป้อนโค้ดด้านบนถูกต้องแล้วและดำเนินการโปรแกรมจะแสดงผลลัพธ์ต่อไปนี้

Output:

ตัวสร้าง C#

จากผลลัพธ์ เราจะเห็นได้ว่า Constructor ถูกเรียกจริง ๆ และค่าของ TutorialName ถูกตั้งค่าเป็น "Default"

หมายเหตุ ที่นี่ค่า "ค่าเริ่มต้น" จะถูกดึงมาจากตัวสร้าง

คำถามที่พบบ่อย

หากไม่ได้ระบุตัวแก้ไขใดๆ สมาชิกของคลาสและโครงสร้างจะมีค่าเริ่มต้นเป็น private และประเภทระดับบนสุดจะมีค่าเริ่มต้นเป็น internal โดยจะซ่อนอยู่จนกว่าคุณจะขยายการมองเห็นของพวกมัน

`protected` จะเปิดเผยสมาชิกให้กับคลาสเดียวกันและคลาสที่สืบทอดมาทั้งหมด แม้กระทั่งข้ามแอสเซมบลี ในขณะที่ `internal` จะเปิดเผยสมาชิกนั้นเฉพาะกับประเภทในแอสเซมบลีเดียวกันเท่านั้น

`protected internal` อนุญาตให้เข้าถึงได้จากแอสเซมบลีเดียวกันหรือคลาสที่สืบทอดมา ส่วน `private protected` นั้นเข้มงวดกว่า โดยอนุญาตให้เข้าถึงได้เฉพาะคลาสที่สืบทอดมาภายในแอสเซมบลีเดียวกันเท่านั้น

C# รองรับคอนสตรัคเตอร์แบบค่าเริ่มต้น แบบมีพารามิเตอร์ แบบคัดลอก แบบคงที่ และแบบส่วนตัว คอนสตรัคเตอร์เหล่านี้ใช้สำหรับกำหนดค่าเริ่มต้นให้กับฟิลด์ของอ็อบเจ็กต์ เรียกใช้ฟังก์ชัน setup ของคลาสเพียงครั้งเดียว หรือคัดลอกค่าจากอ็อบเจ็กต์อื่น

คอนสตรัคเตอร์แบบสแตติกไม่รับตัวดัดแปลงหรือพารามิเตอร์ใดๆ มันจะทำงานเพียงครั้งเดียว ก่อนที่จะสร้างอ็อบเจ็กต์แรกหรือโหลดสมาชิกแบบสแตติก โดยจะทำการเริ่มต้นค่าให้กับฟิลด์แบบสแตติก

ใช่แล้ว คลาสหนึ่งสามารถกำหนดคอนสตรัคเตอร์ได้หลายตัว โดยมีรายการพารามิเตอร์ที่แตกต่างกัน คอมไพเลอร์จะเลือกคอนสตรัคเตอร์ที่ตรงกับอาร์กิวเมนต์ที่ส่งไปยังเมธอด `new`

ใช่แล้ว GitHub Copilot จะแนะนำตัวแก้ไข ตัวสร้าง และตัวเริ่มต้นฟิลด์จากชื่อคลาสหรือความคิดเห็นภายใน Visual Studio และ VS Code. Revดูระดับการมองเห็นที่แนะนำแต่ละระดับ

ML.NET ทำการแมปคุณสมบัติสาธารณะของคลาสข้อมูล C# กับคุณลักษณะและป้ายกำกับของโมเดล เมธอด getter และ setter สาธารณะช่วยให้สามารถอ่านค่าเหล่านั้นได้ในระหว่างการฝึกอบรม

สรุปโพสต์นี้ด้วย: