เรามาต่อกันตอนที่ 3 กันเลยน่ะครับ
.get_thisIsProperty : string()
.set_thisIsProperty : void(string)
เป็นคำสั่งสำหรับ get กับ set ตัวแปรที่เป็นชนิด property
ถ้าเทียบกับภาษา C# ก็คือชุดคำสั่งนี้ครับ
public string thisIsProperty
{
get { return ""; }
set {}
}
จะเห็นว่า get { return ""; } เมื่อแปลงเป็นภาษา IL ก็คือ คำสั่ง .get_thisIsProperty : string() (หมายเลข 1 ของรูป) โดยที่ .get_thisIsProperty เป็นชื่อ method ของ IL code
หลักกการของ C# compiler คือ เมื่อ compile C# code ไปเป็นภาษา IL ตัว C# Compiler ก็จะสร้าง method เป็นของตัวเอง โดยชื่อของ method ก็จะเอาคำว่า "get_" มาใส่นำหน้าชื่อตัวแปรชนิด property นั้นเองครับ สำหรับ string() เป็นตัวบอกว่าไม่มีพารามิเตอร์รับเข้าที่ method และ method ก็จะ return ค่าเป็น string ให้กับ caller หรือ function ที่เรียกใช้ method นี้
เมื่อ double click ที่บรรทัด .get_thisIsProperty : string() ในโปรแกรม ILDasm เราก็จะเห็นภาษา IL ของ method ดังรูป
และคำสั่ง set {} เมื่อแปลงเป็นภาษา IL ก็คือคำสั่ง .set_thisIsProperty : void(string)(หมายเลข 2 ของรูป)
.set_thisIsProperty เป็นชื่อ method และ void(string) บอกให้รู้ว่า method นี้ รับพารามิเตอร์เข้ามาเป็น string และไม่มีการ return ค่ากลับออกไปให้ caller
เนื่องจากใน code C# ของตัวอย่างเราไม่ได้ทำอะไร เมื่อ double click ที่บรรทัด .set_thisIsProperty : void(string) ใน ILDasm เราจึงเห็นว่าการทำงานของ function นี้ไม่ได้ทำอะรเลย
สำหรับ thisIsProperty : instance string() (หมายเลข 3 ของรูป) เป็นการเก็บ information ของ property ที่ชื่อ thisIsProperty โดยเมื่อ double click ที่คำสั่งนี้ เราจะได้ information ตามรูป
ภายใน IL code ของ property thisIsProperty จะเห็นคำสั่ง .get ที่จะบอกว่าให้ runtime ไป execute method ชื่อ get_thisIsProperty ของ class Program ใน namespace CTS เมื่อ caller อ่านค่าจาก thisIsProperty
และคำสั่ง .set ที่จะไป execute method ที่ชื่อ set_thisIsProperty ของ class Program ใน namespace CTS เมื่อ caller มีการ assign ค่าให้กับ thisIsProperty
.thisIsMethod : void()
.thisIsMethod : void(int32)
คือ method โดยมีชื่อเหมือนกัน แต่ พารามิเตอร์ หรือ signature ที่ต่างกัน
ถ้าเทียบกับภาษา C# ก็คือชุดคำสั่งนี้ครับ
public void thisIsMethod()
{
}
public void thisIsMethod(int param)
{
}
เราสามารถเข้าไปดู IL code ของ method นี้ ด้วยการ double click ไปที่ .thisIsMethod : void() หรือ .thisIsMethod : void(int32) เนื่องจากใน code ตัวอย่างเราไม่ได้ใส่อะไรใน function ดังนั้น code IL ของทั้งสอง method จึงยังไม่มีอะไรครับ นอกจาก nop กับ ret
พบกันใหม่ตอนที่ 4 ตอนจบน่ะครับ
TuChay
ไม่มีความคิดเห็น:
แสดงความคิดเห็น