protect
ถ้าเอาบทความไปเผยแพร่แล้วไม่ให้เครดิต ดำเนินคดีด้วย พรบ. คอมพิวเตอร์ฉบับใหม่ ขั้นสูงสุดและไม่ยอมความครับ
วันพฤหัสบดีที่ 27 สิงหาคม พ.ศ. 2558
Common Type System (CTS) ตอนที่ 2
ในตอนนี้เราลองมาดูตัวอย่าง code ของ C# เมื่อเราเขียนโปแกรมตาม standard ของ Microsoft แล้ว ภาษา IL ที่เราได้จะเป็นอย่างไรน่ะครับ
using System;
namespace CTS
{
class Program
{
public int thisIsField;
//This is constructor
public Program()
{
}
//This is destructors
~Program()
{
}
public string thisIsProperty
{
get { return ""; }
set {}
}
public void thisIsMethod()
{
}
public void thisIsMethod(int param)
{
}
public event EventHandler thisIsEvent;
//This is indexer
public string this[int inderxer]
{
get { return ""; }
set { }
}
static void Main(string[] args)
{
}
}
}
จากตัวอย่าง code ลอง compile เราจะได้ file นามสกุล .EXE ในที่นี้ผมได้ชื่อว่า CTS.exe ถ้าลองเปิด CTS.exe ด้วยโปรแกรม ILDasm ก็จะได้ดังรูปน่ะครับ
วิธีการใช้ ILDasm ผมได้อธิบายที่ Execute โปรแกรม Managed Code ตอนที่ 1
เรามาดูที่ command พื้นฐานกันน่ะครับ สำหรับ command ที่ผมยังไม่อธิบายในตอนนี้เป็น command ที่ค่อนข้างยาก ผู้อ่านจะต้องทำความเข้าใจพื้นฐานของ IL และพื้นฐานการจัดการ memory ของ .Net Framework ก่อนแต่ผมจะอธิบาย command ที่เหลือในบทความถัดไป ใจเย็นๆ น่ะครับ
.ctor : void()
.ctor เป็น constructor ของ class ถ้าเรา double click ที่ บรรทัด .ctor : void() ก็จะได้ดังรูป
จากในรูปข้างบนจะเป็นภาษา IL ของ constructor ของ Type ที่ชื่อ Program จะเห็นคำสั่ง nop ซึ่งผมได้อธิบายไว้แล้วที่ Debug VS Release
ที่บรรทัดแรกเราจะเห็น .method เพื่อที่จะบอกให้ runtime รู้ว่านี้เป็นสมาชิกของ Type ชนิด method ผมได้อธิบายเกี่ยวกับชนิดของสมาชิกของ Type ที่ Common Type System (CTS) ตอนที่ 1 ลองย้อนไปอ่านดูน่ะครับ
ถ้าเทียบกับภาษา C# ก็คือชุดคำสั่งนี้ครับ
public Program()
{
}
.Finalize : void()
ตัวนี้เป็น destructors ของ class สามารถ double click เพื่อเข้าไปดูภาษา IL ของ function นี้ได้เหมือนกัน
ถ้าเทียบกับภาษา C# ก็คือชุดคำสั่งนี้ครับ
~Program()
{
}
.thisIsField: public int32
ตัวนี้จะเป็นตัวบอก runtime ว่าเป็นสมาชิกชนิด field และมี data type เป็น int 32 bit ถ้าเรา double click ที่ บรรทัด .thisIsField: public int32 จะเห็นว่าที่นำหน้าบรรทัดแรก ระบุเป็น .field และไม่มี function การทำงานสำหรับตัวแปรนี้
ถ้าเทียบกับภาษา C# ก็คือชุดคำสั่งนี้ครับ
public int thisIsField;
เริ่มสนุกกับภาษา IL แล้วใช่ไหมครับ ถ้าอย่างนั้นพบกันใหม่ในตอนที่ 3 ครับ
TuChay
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น