protect

ถ้าเอาบทความไปเผยแพร่แล้วไม่ให้เครดิต ดำเนินคดีด้วย พรบ. คอมพิวเตอร์ฉบับใหม่ ขั้นสูงสุดและไม่ยอมความครับ

วันจันทร์ที่ 31 สิงหาคม พ.ศ. 2558

Common Type System (CTS) ตอนที่ 3


เรามาต่อกันตอนที่ 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

ไม่มีความคิดเห็น:

แสดงความคิดเห็น