protect

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

วันพุธที่ 2 กันยายน พ.ศ. 2558

Common Type System (CTS) ตอนที่ 4 (ตอบจบ)



จาก code ตัวอย่างของ ตอนที่ 2 ในส่วนของตัวแปรชนิด event ของ C# code

public event EventHandler thisIsEvent; 

code ข้างบนเมื่อถูก compile ด้วย C# compiler ตัว compiler จะสร้าง member ขึ้นมาทั้งหมด 4 ตัวในภาษา IL ดังรูปข้างล่าง



ตัวแรก คือ field ที่ชื่อ  thisIsField (หมายเลข 1 ในรูป) โดย C# compiler จะสร้างเป็น member  ชนิด private โดยมี type เป็นชนิด EventHandler ซึ่งเป็น type ที่อยู่ใน namespace System ของ MSCorLib.DLL


ตัวที่สองและสามคือ method ที่ชื่อ add_thisIsEvent (หมายเลข 2 ในรูป) กับ remove_thisIsEvent (หมายเลข 3 ในรูป) โดย C# compiler สร้าง method name โดยใส่ "add_" และ "remove_" รวมกับชื่อ field (หมายเลข 1 ในรูป)


ตัวที่สี่ คือสมาชิกชนิด event (หมายเลข 4 ของรูป) มี  modifyer เป็นชนิด public สำหรับให้ caller เรียกใช้ ถ้าเรา double click ที่บรรทัดหมายเลข 4 ก็จะได้ ภาษา IL code ดังรูป

เมื่อ caller ทำการ subscribe event thisIsEvent ด้วย operator "+=" ตัว runtime ก็จะใช้คำสั่ง .addon เพื่อที่จะไปเรียก method add_thisIsEvent

และเมื่อ caller unsubscribe event thisIsEvent ด้วย operator "-=" ตัว runtime ก็จะใช้คำสั่ง .removeon เพื่อที่จะไปเรียก method  remove_thisIsEvent


ลองดูตัวอย่าง code ที่ caller เรียกใช้ event thisIsEvent

        static void Main(string[] args)
        {
            Program pg = new Program();
            pg.thisIsEvent += new EventHandler(pg_thisIsEvent);
            pg.thisIsEvent -= new EventHandler(pg_thisIsEvent);
        }

        static void pg_thisIsEvent(object sender, EventArgs e)
        {
           
        }


code pg.thisIsEvent += new EventHandler(pg_thisIsEvent); ณ ตอน runtime  JITCompiler จะไปเรียกใช้คำสั่ง .addon ของ event thisIsEvent ซึ่งก็คือไปเรียกใช้ method add_thisIsField

สำหรับ code pg.thisIsEvent -= new EventHandler(pg_thisIsEvent); ณ ตอน runtime  JITCompiler จะไปเรียกใช้คำสั่ง .removeon ของ event thisIsEvent ซึ่งก็คือไปเรียกใช้ method remove_thisIsField





จบแล้วครับสำหรับการแนะนำ type ทั้ง 4 ชนิดของภาษา IL พร้อมทั้งตัวอย่าง code ของ C# ถ้ามาถึงตอนนี้เราก็พอจะมีความรู้มากขึ้นในภาษา IL น่ะครับ จากตัวอย่าง code ของตอนที่ 2 ผมติดคำอธิบายเรื่องของ Indexer ซึ่งผมจะไปอธิบายพร้อมทั้งแสดงวิธีใช้ในอีกตอน

พบกันใหม่ตอนหน้าครับ
TuChay

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

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