this Keyword
ธนพัฒน์ สถิตย์กุลรัตน์ 650710548
ในภาษา C# this keyword คำว่า this เป็นคำที่ใช้ช่วยในการอ้างอิงถึง วัตถุ(object)ที่ถูกสร้างจากคลาสนั้นหรือเรียกว่า Instance คำว่า this สามารถใช้ได้ในหลายสถานการณ์ เช่น
1. ใช้ this เพื่ออ้างถึง Instance ของคลาส
Example
using System;
class Pet {
public string name = "Aomsin";
public void SetNameWithoutThis(string name)
{
name = name;
}
public void SetNameWithThis(string name)
{
this.name = name;
}
public string GetName()
{
return name;
}
}
class SetPet {
public static void Main()
{
Pet obj = new Pet();
obj.SetNameWithoutThis("Dollar");
Console.WriteLine("SetNameWithoutThis: " + obj.GetName());
obj.SetNameWithThis("Dollar");
Console.WriteLine("SetNameWithThis: " + obj.GetName());
}
}OUTPUT
อธิบาย CODE
จาก code ด้านบนเป็นการใช้this เพื่ออ้างอิง field name ของ instance คลาสปัจจุบัน โดยใช้Methodแสดงให้เห็นความต่างของการใช้ this และไม่ใช้ this เริ่มแรกเราให้ field name มีค่าเป็น aomsin อยากทำการเปลี่ยนเป็น Dollar ผ่านMethodทั้งสอง สังเกตุได้ว่าMethodที่ไม่มีการใช้ this ไม่มีผลต่อ field name ของคลาส Pet เพราะมันไม่ได้ใช้ this เพื่ออ้างอิง field ของ instance แต่ถ้ามีการใช้ this จะส่งผลทำให้ field name ของ instance ของคลาส Pet ที่ถูกสร้างขึ้นมาเปลี่ยนจาก aomsin เป็น Dollar
2. ใช้ this เพื่อเรียกใช้ constructor ตัวอื่นภายในคลาสเดียวกัน
Example
OUTPUT
อธิบาย CODE
ใน constructor แรกรับพารามิเตอร์ name กำหนดค่าให้กับ this.name และกำหนดค่า age เป็น 1 โดยอัตโนมัติเมื่อไม่ได้ระบุอายุมา ส่วน constructor ที่สองใช้ this(name) เพื่อเรียกใช้ constructor แรกที่มีพารามิเตอร์ name ก่อน จากนั้นจึงกำหนดค่า age แยกต่างหากภายใน constructor ที่สอง เมื่อส่ง name เข้าไปอย่างเดียวจะเรียกใช้ constructor ที้่รับชื่อเท่านั้น จึงทำให้มีอายุเป็น 1 อัตโนมัติ และหากส่งทั้ง name และ age จะเรียกใช้ constructor ทีี่รับทั้งชื่อและอายุ
3. ใช้ this เพื่อเรียกใช้เมธอดคลาสปัจจุบัน
Example
OUTPUT
อธิบาย code
จาก code ด้านบนมีการเรียกใช้ Method Hello โดยใช้this.ตามฟิลด์ name เพื่อเรียกใช้เมธอดในคลาส Pet
4.การใช้คีย์เวิร์ด this เป็นพารามิเตอร์ในMethod
Example
OUTPUT
อธิบาย code
ในเมธอด showdetail มีการเรียก method PrintPetDetails ในคลาส Pet และส่งคลาส Pet เป็นพารามิเตอร์ให้ method PrintPetDetail เพื่อที่จะใช้ตัวแปร Name ของคลาส Pet
5. การใช้ this เพื่อประกาศ Indexer
Example
OUTPUT
คำอธิบาย code
Index declaration ประกอบด้วย get และ set ใน get เลขที่รับมามากกว่าเท่ากับ 0 และ เลขที่รับมามีข้อมูลในตำแหน่งนั้นจะทำการแสดงชื่อสัตว์เลี้ยงออกมา แต่ถ้าเลขที่รับมไม่มีข้อมูลในตำแหน่งนั้นจะไม่แสมาข้อความว่า Index out of range ส่วน set เลขที่รับมามากกว่าเท่ากับ 0 และ เลขที่รับมามีข้อมูลในตำแหน่งนั้นจะทำการเปลี่ยนค่าในตำแหน่งนั้นแทนหากเลขที่รับมาเกินจำนวนข้อมูลจะเป็นการเพิ่มข้ใมูลเข้าใน Array
ตัวอย่างการ Code ที่ใช้ this keyword
OUTPUT
คำอธิบาย
คลาส Pet ประกอบด้วยชื่อสัตว์เลี้ยง(name) สายพันธุ์(breed) และราคา(price) คลาสPetมี constructor 2 แบบ แบบแรกจะมีการกำหนดราคา(price) เป็น 0 โดยอัตโนมัติ แบบที่สองจะรับราคา(price)มาจากเราสามารถกำหนดเองได้ และมี property หรือ ตัวกลางของ name,breed,price โดย property ของ price สามารถเปลี่ยนได้ด้วยโครงสร้าง set ของ property ต่อมามีการใช้ this เพื่อประกาศ Indexer ทำให้สามารถเข้าถึงและ upload ข้อมูลได้ตามเลข index ในส่วนของ method ChangePrice มีการใช้ this เพื่อเข้าถึง instance ของคลาสปัจจุบัน และ ใช้ this เพื่อเรียก method ภายในคลาสเดียวกัน
นำมาเขียนด้วยภาษา C
ความแตกต่างระหว่างภาษา C และภาษา C#
• ในภาษา C ใช้ struct ในการเก็บข้อมูลเกี่ยวกับสัตว์เลี้ยง เช่น name, breed, และ price แทนการใช้ class
• ในภาษา C ใช้ pointer (Pet *pet) เพื่อจำลองการเข้าถึงข้อมูลใน struct แทนการใช้ this ใน C# โดยใช้ -> เพื่อเข้าถึงสมาชิกในโครงสร้าง (คล้ายกับการใช้ this เพื่อเข้าถึงสมาชิกของออบเจ็กต์ใน C#)
• ในภาษา C ฟังก์ชัน changePrice ใช้ pointer เพื่อเปลี่ยนแปลงค่าภายในโครงสร้างโดยตรง
สรุป
ใน C ต้องจัดการข้อมูลผ่านการใช้ pointer และ struct ไม่มี this แบบภาษาC#
นำมาเขียนด้วยภาษา Java
ความแตกต่างระหว่าง Java และ C#
ทั้งสองภาษามีการใช้ this ตามสถานการณ์ต่างๆที่เหมือนกันแต่ต่างกันที่ใน C# มี property ช่วยในการเข้าถึงตัวแปรภายในโดยมี getter และ setterแต่ใน Java ไม่มี property syntax การใช้ this กับ getter และ setter ใน Java จึงต้องเรียกใช้ method โดยตรง
ตัวอย่างเปรียบเทียบ Property ใน C# กับ Java (เพิ่มเติมจาก code ด้านบน)
Code ProperTy Syntax In C#
Code In Java
นำมาเขียนด้วย Python
ความต่างระหว่าง C# กับ Python
• ใน C# ใช้คำว่า this เพื่ออ้างถึงออบเจ็กต์ปัจจุบันของ class ส่วนใน python ใช้คำว่า self เพื่ออ้างถึงออบเจ็กต์ปัจจุบันของ class
• Python ต้องใส่ self เป็นพารามิเตอร์แรกของทุก method เสมอเพื่อให้เข้าใจว่า method นั้นทำงานกับ object อะไร
• constructor ใช้ method init() เป็น constructor และไม่สามารถเรียก constructor อื่นโดยตรงผ่าน self ได้ต้องใช้ แต่ในภาษา C# สามารถเรียกผ่าน this ได้
• Python ไม่มี property แบบ C# แต่สามารถใช้ decorator @property เพื่อสร้าง getter และ setterได้
Reference
Last updated

