20.มารู้จักกับ Property กัน

💬 ถ้าเราอยากให้ตัวแปรที่เป็น private ถูกภายนอกกำหนดค่าหรืออ่านค่าได้ โดยปรกติเราก็ต้องสร้าง method ขึ้นมา 2 ตัว สำหรับเขียนและสำหรับอ่านชิมิ ดังนั้นถ้าเรามีตัวแปรแบบนั้น 20 ตัว นั่นก็หมายความว่าเราก็จะมี 40 method อะจิ!! แบบนี้เราคงไม่ต้องทำอะไรกันพอดีเพราะคลาสเราจะรกไปด้วย method นั่นเอง ดังนั้นในรอบนี้เราจะมารู้จักกับ Property ที่จะเป็นพระเอกมาช่วยเราในเรื่องนี้เองงับ

🎯 สรุปสั้นๆ

👨‍🚀 Property คือ

Method พิเศษตัวนึงที่ช่วยให้เราเข้าถึงตัวแปรได้ง่ายๆ ผ่าน accessor ที่ชื่อว่า get กับ set โดยเราสามารถเลือกได้ว่า property ที่เราสร้างขึ้นมาจะทำงานกับตัวแปรไหนได้ ตามโค้ดด้านล่าง

public class MyClass
{
   private string name;

   public string Name
   {
      get { return name; }
      set { name = value; }
   }
}

Get คือตัวช่วยให้เราสามารถเข้าไปเรียกดูข้อมูลได้

Set คือตัวช่วยให้เราสามารถเข้าไปเขียนข้อมูลได้

value keyword คำสั่ง value ที่อยู่ใน set นั่นหมายถึงค่าที่ผู้ใช้ส่งมากำหนดให้ตอนเรียกใช้ property Name

👨‍🚀 Auto-Implemented Property

คือ property ที่เราไม่ต้องไปกำหนดว่ามันจะทำงานกับตัวแปรตัวไหนเลย ซึ่ง C# จะเป็นคนจัดการให้ เรามีหน้าที่แค่กำหนด get set ของมันก็พอ ตามโค้ดด้านล่างเลย

public class MyClass
{
   public string Name { get; set; }
}

เกร็ดความรู้ โดยปรกติ Auto-Implemented Property ตอนที่มัน compile มันจะไปแอบสร้างตัวแปรชื่อมั่วๆขึ้นมา เพื่อให้ Property ที่ชื่อว่า Name สามารถทำงานกับตัวแปรที่ถูกแอบสร้างขึ้นมาผ่าน get และ set ได้นั่นเอง

👨‍🚀 Property คัดกรองข้อมูลให้กับตัวแปร

เราสามารถเขียนโค้ดเพื่อจัดการกับเวลาที่มีคน แก้ไขข้อมูล หรือ เรียกดูข้อมูล ผ่าน property ได้ตามโค้ดด้านล่าง

public class MyClass
{
   private bool isMale;

   private string name;

   public string Name
   {
      get
      {
         var title = isMale? "Mr." : "Ms.";
         return title + name;
      }
      set
      {
         name = value.ToLower();
      }
   }
}

ข้อความระวัง ในตัวอย่างบรรทัดที่ 12 จะเห็นว่าผมเขียนโค้ดต่อ string ด้วยคำสั่ง + (concatenation) ซึ่งโค้ดก็ทำงานได้อยู่นะ แต่เอาจริงๆเราไม่ควรเขียนแบบนั้นเพราะมันจะทำให้ประสิทธิภาพของแอพตกลง ซึ่งเราควรเขียนยังไงผมจะขอยกไปอธิบายในเรื่องของ string ในบทถัดๆไปนะครับ

👨‍🚀 Access Modifier กับ Proper

เราสามารถกำหนด access modifier ให้กับพวก accessors ได้นะครับ เช่นผมอยากให้ ทุกคนเรียกดูตัวแปร Name ได้ แต่ให้คลาสมันเองเท่านั้นที่แก้ไขได้ ผมก็จะได้โค้ดตามรูปเบย

public class MyClass
{
   public string Name { get; private set; }
}

👨‍🚀 Accessors ของ Property

พวก accessors จริงๆจะมีทั้ง 2 ตัว หรือจะมีแค่ตัวใดตัวนึงก็ได้นะ ตามโค้ดด้านล่างเลยงับ

public class MyClass
{
   public string Name { get; set; }
   public int Age { get; }
   public string Address { set; }
}

ข้อควรระวัง โค้ดด้านบนไม่ค่อยเหมาะสมที่จะเขียนแบบนั้นนะครับ แต่ผมว่ามันเห็นแล้วเข้าใจง่ายดี ฮา

Last updated