หัดทำ delegate ภาค2 ตอน Multicasting

posted on 13 Jun 2008 21:08 by xnanoob  in Tutorials

ดีค่า จากก่อนหน้านี้ได้หัดทำ delegate กันไป

มีจุดที่น่าสนใจก็คือว่า ถ้า method ที่เป็นตัวแทนนั้นเป็นแบบ static method เราก็สามารถถ้าถึง method นั้นใน delegate ได้เลย แต่หาก method ในคลาสนั้นเป็นแบบธรรมดาคุณก็ต้องทำการสร้าง new object มาใช้เหมือนปกติในจังหวะ delegate

จากการที่เราสร้าง delegate ขี้นมาเป็นตัวแทนของ   เราแล้วให้มันไปทำงานต่างๆ นั้น ตัวแทนของเราสามารถทำงานได้มากกว่า 1 อย่าง หมายถึงว่าสามารถซ่อนหรือปกปิด method ได้มากหนึ่ง method เราจะเรียกว่า multicasting


หรือพูดแบบบ้านๆ ก็แบบว่าพ่อเราใช้ให้ไปจ่ายค่าไฟแล้วไปจ่ายค่าโทรศัพท์ด้วย พ่อให้เราเป็นตัวแทนอะไรประมาณเนี้ย

Quote
point to more than one function at a time


ซึ่งเราสามารถเพิ่ม method เข้าไปใน delegate ได้ โดยใช้สัญลักษณ์

+=
 เหมือนเป็นการผูก events เข้าไป (เดี๋ยวจะพูดถึงเรื่อง event ในตอนต่อไป)
และในทางกลับกันจะใช้สัญลักษณ์
-=
 ในการลดการ call  method ที่ใน delegate ที่จะทำงาน

Code:
class test {
        //ประกาศ delegate
        // รับค่าเป็น string ไม่มีการ return ค่า
        public delegate void testD(string a);

        //สร้าง method testM รับค่าเป็น string return ไม่มีการ return ค่า
        public void testM(string a) {
            Console.WriteLine(string.Concat(a, " call TestM"));
        }

        //สร้าง method testM2 รับค่าเป็น string return ไม่มีการ return ค่า
        public void testM2(string a)
        {
            Console.WriteLine(string.Concat(a," call TestM2"));
        }
    }



จังหวะ ผูก method ใน delegate

Code:
test.testD d = new test.testD(o.testM);
             d += new test.testD(o.testM2);



หรือแบบนี้ให้ code เราดูสวยขึ้น

Code:
test.testD d = null;
            d += new test.testD(o.testM);
            d += new test.testD(o.testM2);



เรียกใช้เหมือนปกติ

Code:
d("hello world");



ถ้าไงขอตัวก่อนนะค่ะ บายค่า

ปล. เอกสารอ้างอิง http://www.akadia.com/services/dotnet_delegates_and_events.html#Multicasting

 

ปล.2 ดูแบบมีสีได้ที่ http://www.xnanoob.com/forum/index.php?topic=18.0

edit @ 13 Jun 2008 23:55:06 by xnanoob

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

ขยันโคตร

#1 By book on 2008-06-14 01:15