protect

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

วันพฤหัสบดีที่ 10 กันยายน พ.ศ. 2558

Indexer ใน C# ตอนที่ 2



เรามาต่อจากตอนที่ 1 กันเลย

ในตอนที่แล้วผมได้เขียน code ที่ indexer มี signuature เป็น int อย่างเดียว ที่นี้เราลองเพิ่ม Indexer อีกหนึ่งตัวน่ะครับที่มี signature เป็น string.

        public int this[string name]
        {
            get
            {
                for (int i = 0; i < 7; i++)
                {
                    if (nameOfDay[i] == name)
                        return i;
                }
                return 99;
            }
        }


ใน IL code เราก็จะได้ method ที่ชื่อ get_Item อีกหนึ่งตัวแต่ signature ตัวใหม่จะเป็น get_Item : int32(string) คือรับ parameter เป็น string และ return int กลับไปให้ caller.



นอกจากนั้นเรายังจะได้ property อีกหนึ่งตัวที่ชื่อ Item : instance int32(string)

ต่อไปเราลองมาเพิ่ม C# code จาก read only มาเป็น property ที่สามารถ update ได้ ตาม code ข้างล่างครับ

        public string this[int index]
        {
            get
            {
                if (index > nameOfDay.Length)
                    return "";
                else
                    return nameOfDay[index];
            }
            set
            {
                if (index > nameOfDay.Length)
                    throw new Exception("The day should have only 7 day");
                else
                    nameOfDay[index] = value;
            }
        }

จาก นั้นลอง compile code แล้วมาดู IL code กันครับจะเห็น method ที่เพิ่มเข้ามาอีก 1 method คือ set_Item : void(int 32, string)  จะเห็นว่า signature จะเปลี่ยนมาเป็นรับค่า 2 parameter คือ int กับ string


โดยที่ parameter ชนิด int คือ ตำแน่งของ index และ string ก็คือ value ที่ assign ให้กับ index ตัวนั้น


จบแล้วครับสำหรับ Indexer ในภาษา C# และภาษา IL พบกันใหม่บทความหน้าครับ
TuChay


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

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