Restrictions on Properties

650710824 - Jakkapan Chompat

เนื้อหา

Properties คือ :

  • Properties คือ สมาชิกของคลาสที่ช่วยให้การอ่าน และ เขียนข้อมูลกับตัวแปรในคลาสทำได้สะดวกขึ้น โดยทำงานผ่านเมธอดภายในคลาส

Properties ในภาษา C# :

  • ในภาษา C# ตัวแปรที่เรียกว่า property เป็นเมธอดพิเศษที่เรียกว่า accessors ซึ่งช่วยให้การจัดการข้อมูลทำได้ง่ายขึ้น โดยที่ property จะประกอบไปด้วยเมธอดสองประเภท ได้แก่ เมธอด get ใช้สำหรับการอ่านค่าของตัวแปร หรือ เรียกใช้งานเมธอดอื่นภายในคลาส และเมธอด set ซึ่งใช้ในการกำหนดค่าจากภายนอกให้กับตัวแปรผ่าน property การใช้ property จึงช่วยเพิ่มความปลอดภัยและความสะดวกในการจัดการตัวแปรจากภายนอกคลาส

ตัวอย่างโค้ด ภาษา C# :

public class MyClass{
   private string name;
   public string Name {
      get { return name; } // get คือตัวช่วยที่ให้เราสามารถเข้าไปเรียกดูข้อมูลได้
      set { name = value; } // set คือตัวช่วยที่ให้เราสามารถเข้าไปเขียนข้อมูลได้
// value keyword คำสั่ง value ที่อยู่ใน set นั่นหมายถึงค่าที่ผู้ใช้ส่งมากำหนดให้ตอนเรียกใช้ property Name
   }
}

Restrictions on Properties ในภาษา C# :

  1. การส่งผ่านพารามิเตอร์ ref หรือ out ไปยัง เมธอด:

  • ในภาษา C# Properties ไม่สามารถส่งค่าแบบ ref หรือ out ไปยัง เมธอดได้ หมายความว่าเราจะไม่สามารถส่งค่าของ property ไปยัง เมธอดได้

  1. การ Overload Properties :

  • ในภาษา C# การ overload properties ไม่สามารถมีเมธอด get หรือ เมธอด set มากกว่า 1 ตัวสำหรับ property เดียวกันได้ ไม่งั้นจะทำให้เกิดการ error ได้

  1. การเปลี่ยนแปลงค่าตัวแปรในเมธอด get accessor :

  • ในภาษา C# Properties ไม่ควรเปลี่ยนแปลงค่าตัวแปรใน เมธอด get accessor เพราะ เมธอด get ถูกออกแบบมาสำหรับการดึงข้อมูล ไม่ใช่การแก้ไขค่าภายใน object

เปรียบเทียบกับภาษา C, Java, Python

  1. ภาษา C :

  • ในภาษา C ไม่มี Properties แต่สามารถใช้ pointer เพื่อเข้าถึงค่าได้

  1. ภาษา Java :

  • ในภาษา Java มีเมธอด getter และ เมธอด setter สำหรับการเข้าถึงค่าและปรับค่าของตัวแปร ที่เหมือนกับ Properties ในภาษา C#

  1. ภาษา Python :

  • ในภาษา Python สามารถใช้ property decorator เพื่อสร้าง properties ได้ และสามารถเข้าถึงค่าได้โดยตรงผ่านค่าชื่อ proprety


ตัวอย่าง

ตัวอย่าง : Restrictions on Properties ในภาษา C# :

  1. การส่งผ่านพารามิเตอร์ ref หรือ out ไปยัง เมธอด :

  • ในภาษา C# Properties ไม่สามารถส่งค่าแบบ ref หรือ out ไปยัง เมธอด ได้ หมายความว่าเราจะไม่สามารถส่งค่าของ property ไปยัง เมธอด ได้

ตัวอย่างโค้ด ภาษา C# :

<access_modifier> <return_type> <property_name>
{
        get { // body }
        set { // body }
}

อธิบายเพิ่มเติม :

จากตัวอย่างโค้ด property ใช้ เมธอด get และ เมธอด set ในการทำงาน เราเลยไม่สามารถส่งค่าแบบ ref หรือ out ได้ เนื่องจาก เมธอด ไม่มีพื้นที่เดียวกันในหน่วยความจำหมือนตัวแปร

  1. การ Overload Properties :

  • ในภาษา C# การ overload properties ไม่สามารถมีเมธอด get หรือ เมธอด set มากกว่า 1 ตัวสำหรับ property เดียวกันได้ ไม่งั้นจะทำให้เกิดการ error ได้

ตัวอย่างโค้ด ภาษา C# :

class Myprop { 
	int _number; 
	public int Number { 
		get { return this._number; } 
		set { this._number = value; } 
		get { return this._number; } 
	} 
} 
class GFG { 
	static void Main() { 
		Myprop ex = new Myprop(); 
		
		// set { } 
		ex.Number = 5; 
		console.WriteLine("If there are only two properties"+ " in class ex we will get the output"); 
		
		// get { } 
		Console.WriteLine(ex.Number); 
	} 
} 

ข้อผิดพลาดตอนคอมไพล์ :

prog.cs(19,3): error CS1007: Property accessor already defined

อธิบายเพิ่มเติม :

จากตัวอย่างโค้ด เกิดการ error เพราะ มีเมธอด get มากกว่า 1 ตัวสำหรับ property เดียวกัน

  1. การเปลี่ยนแปลงค่าตัวแปรใน เมธอด get accessor :

  • ในภาษา C# Properties ไม่ควรเปลี่ยนแปลงค่าตัวแปรใน เมธอด get accessor เพราะ เมธอด get ถูกออกแบบมาสำหรับการดึงข้อมูล ไม่ใช่การแก้ไขค่าภายใน object

ตัวอย่างโค้ด ภาษา C# :

class Myprop { 
	int _number; 
	public int Number { 
		get { 
			return this._number; 
			this._number = 5; 
		} 
		set { this._number = value; } 
	} 
} 
class GFG { 
	static void Main() { 
		Myprop ex = new Myprop(); 

		// set { } 
		ex.Number = 5; 

		// get { } 
		Console.WriteLine(ex.Number); 
	} 
} 

Ouput :

5

อธิบายเพิ่มเติม :

จากตัวอย่างโค้ด มีการเปลี่ยนค่า _number ใน เมธอด get accessor ด้วยคำสั่ง this._number = 5; ซึ่งไม่ถูกต้อง เพราะ เมธอด get ใช้เพื่ออ่านค่าเท่านั้น ไม่ใช่แก้ไขข้อมูลภายใน object


เปรียบเทียบภาษา C, Java, Python

  1. ภาษา C :

  • ในภาษา C ไม่มี Properties แต่สามารถใช้ pointer เพื่อเข้าถึงค่าได้

ตัวอย่างโค้ด ภาษา C :

#include<stdio.h>
void main() {
  int x = 10;
  
  //ประกาศ pointer
  int * ptr = & x;

  // print ค่าปัจจุบัน
  printf("Value of x = %d\n", * ptr);

  // เปลี่ยนค่า
  * ptr = 20;

  // print ค่าที่อัปเดต
  printf("Value of x = %d\n", * ptr);
}

Output :

Value of x = 10
Value of x = 20
  1. ภาษา Java :

  • ในภาษา Java มีเมธอด geter และ เมธอด setter สำหรับการเข้าถึงค่าและปรับค่าของตัวแปร ที่เหมือนกับ Properties ในภาษา C#

ตัวอย่างโค้ด ภาษา Java :

class Product {
  private String title;
  public String getTitle() {
    return this.title;
  }
  public void setTitle( String title ) {
    this.title = title;
  }
}
class Main {  
  public static void main(String args[]) { 
    Product product = new Product();
    product.setTitle( "Computer" );
    System.out.print( product.getTitle() );
  } 
}

Output :

Computer

อธิบายเพิ่มเติม :

จากตัวอย่างโค้ด มีการสร้าง class Product พร้อมตัวแปรชื่อ title ในรูปแบบ private จากนั้นสร้าง เมธอด get และ เมธอด set

  • เมธอด getชื่อ getTitle ดึงค่าตัวแปร title จาก class

  • เมธอด set ชื่อ setTitle กำหนดค่าให้กับตัวแปร title ภายใน class

  1. ภาษา Python :

  • ในภาษา Python สามารถใช้ property decorator เพื่อสร้าง properties ได้ และสามารถเข้าถึงค่าได้โดยตรงผ่านค่าชื่อ proprety

ตัวอย่างโค้ด ภาษา Python :

class C: 
    def __init__(self):
        self._x = None 
    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    x = property(getx, setx, "I'm the 'x' property.")

อธิบายเพิ่มเติม :

จากตัวอย่างโค้ด มีการสร้าง class C ที่มี property ชื่อว่า x ซึ่งสามารถใช้เพื่ออ่านค่า (get) และ กำหนดค่า (set) ของตัวแปร _x ได้


คลิปนำเสนอ


สไลด์นำเสนอ


แหล่งที่มาอ้างอิง

  • ในเว็บนี้ใช้ศึกษาความหมายของ Properties คืออะไร

  • ในเว็บนี้นำตัวอย่างโค้ด Properties ในภาษา C# มาใช้

  • ในเว็บนี้ใช้ศึกษาหลักการทำงานของ Restrictions on Properties ในภาษา C# พร้อมกับนำตัวอย่างโค้ดมาใช้

  • ในเว็บนี้ใช้ศึกษาหลักการทำงานของ ref และ out ในภาษา C#

  • ในเว็บนี้ใช้ศึกษาหลักการทำงานของ Getter และ Setter ในภาษา Java

  • ในเว็บนี้ใช้ศึกษาหลักการทำงานของ property decorator เพื่อสร้าง properties ในภาษา Python พร้อมกับนำตัวอย่างโค้ดมาใช้

  • ในเว็บนี้ใช้ศึกษาหลักการทำงานของ Pointers ในภาษา C พร้อมกับนำตัวอย่างโค้ดมาใช้

  • ในเว็บนี้ใช้ศึกษาหลักการทำงานของ เมธอด get และ เมธอด set ในภาษา Java พร้อมกับนำตัวอย่างโค้ดมาใช้


Last updated