มือใหม่หันเขียนโค้ด
พื้นฐานที่ควรต้องรู้
Cloud Computing
Software Testing
Web
Software Design

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; }
}

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