protect

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

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

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


จาก code ของบทความ Common Type System ตอนที่ 2 ผมได้ยกตัวอย่าง method ชนิด indexer แต่ยังไม่ได้อธิบายอย่างละเอียด ผมขออธิบายรายละเอียดในบทความนี้น่ะครับ

Indexer คือ การดึงข้อมูลหรือ update ข้อมูลผ่าน instance object โดยใช้ index เป็น paremeter เรามาดูตัวอย่าง code กันครับ

  class Program
    {
        static void Main(string[] args)
        {
            Weekly week = new Weekly();
            for(int i=0;i<7;i++)
                Console.WriteLine(week[i]);

            Console.ReadLine();
        }
    }

    public class Weekly
    {
        private string[] nameOfDay = new string[7] {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};


        public Weekly()
        {

        }

        public string this[int index]
        {
            get
            {
                if (index > nameOfDay.Length)
                    return "";
                else
                    return nameOfDay[index];
            }
        }

    }


Indexer ของ class Weekly คือ public string this[int index] เราสามารถเรียกใช้ indexer ผ่าน object ได้เลยด้วย week[i] โดยที่ i ถือเป็น parameter ของ indexer นี้ครับ

เมื่อเรามาดู IL code จะได้ดังรูปข้างล่าง








C# compiler ได้สร้าง method ที่ชื่อ get_Item : string(int32)
string(int32) จะหมายถึง method นี้จะรับ parameter เป็น int32 และ method จะ return string กลับไปให้ caller
code ของ method สามารถเข้าไปดูได้โดยการ dobule click ที่บรรทัดนี้ ชื่อของ method C# compiler ตั้งชื่อตามหลักของ method คือนำ "get_" นำหน้า "Item" เพราะว่าเป็น method ชนิด indexer

เมื่อ เทียบกับภาษา C# method get_Item ก็คือ code นี้ครับ

        public string this[int index]
        {
            get
            {
                if (index > nameOfDay.Length)
                    return "";
                else
                    return nameOfDay[index];
            }
        }


นอกจากนั้น C# Compiler ยังได้สร้าง property ที่ชื่อ Item ใน บรรทัด Item : instance string(int32) เพื่อเป็นการสร้าง indexer สำหรับให้ caller เรียกใช้ เมื่อ double click ที่บรรทัดนี้ จะได้ดังรูป



เนื่องจาก Indexer Weekly ใน C# code ข้างบน เป็นการอ่านแบบ read only คือ ไม่มี คำสั่ง set มีแต่คำสั่ง get ใน IL code ของ property Item จึงมีแค่ .get เท่านั้น

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

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

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