จาก 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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น