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# :
การส่งผ่านพารามิเตอร์
ref
หรือout
ไปยัง เมธอด:
ในภาษา C# Properties ไม่สามารถส่งค่าแบบ
ref
หรือout
ไปยัง เมธอดได้ หมายความว่าเราจะไม่สามารถส่งค่าของ property ไปยัง เมธอดได้
การ Overload Properties :
ในภาษา C# การ overload properties ไม่สามารถมีเมธอด
get
หรือ เมธอดset
มากกว่า 1 ตัวสำหรับ property เดียวกันได้ ไม่งั้นจะทำให้เกิดการ error ได้
การเปลี่ยนแปลงค่าตัวแปรในเมธอด
get
accessor :
ในภาษา C# Properties ไม่ควรเปลี่ยนแปลงค่าตัวแปรใน เมธอด
get
accessor เพราะ เมธอดget
ถูกออกแบบมาสำหรับการดึงข้อมูล ไม่ใช่การแก้ไขค่าภายใน object
เปรียบเทียบกับภาษา C, Java, Python
ภาษา C :
ในภาษา C ไม่มี Properties แต่สามารถใช้ pointer เพื่อเข้าถึงค่าได้
ภาษา Java :
ในภาษา Java มีเมธอด
getter
และ เมธอดsetter
สำหรับการเข้าถึงค่าและปรับค่าของตัวแปร ที่เหมือนกับ Properties ในภาษา C#
ภาษา Python :
ในภาษา Python สามารถใช้
property
decorator เพื่อสร้าง properties ได้ และสามารถเข้าถึงค่าได้โดยตรงผ่านค่าชื่อ proprety
ตัวอย่าง
ตัวอย่าง : Restrictions on Properties ในภาษา C# :
การส่งผ่านพารามิเตอร์
ref
หรือout
ไปยัง เมธอด :
ในภาษา C# Properties ไม่สามารถส่งค่าแบบ
ref
หรือout
ไปยัง เมธอด ได้ หมายความว่าเราจะไม่สามารถส่งค่าของ property ไปยัง เมธอด ได้
ตัวอย่างโค้ด ภาษา C# :
<access_modifier> <return_type> <property_name>
{
get { // body }
set { // body }
}
อธิบายเพิ่มเติม :
จากตัวอย่างโค้ด property ใช้ เมธอด get
และ เมธอด set
ในการทำงาน เราเลยไม่สามารถส่งค่าแบบ ref
หรือ out
ได้ เนื่องจาก เมธอด ไม่มีพื้นที่เดียวกันในหน่วยความจำหมือนตัวแปร
การ 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 เดียวกัน
การเปลี่ยนแปลงค่าตัวแปรใน เมธอด
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
ภาษา 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
ภาษา 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
ภาษา 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