與C/C++指針相似的C#代表元及事件觸發(fā)

字號(hào):

代表元是C#中比較復(fù)雜的概念,C#中的代表元和C/C++中的函數(shù)指針?lè)浅O嗨剖褂么碓梢园汛碓獌?nèi)部方法的引用封裝起來(lái)然后通過(guò)它使用代表元引用的方法。
    它有一個(gè)特性就是不需要知道被引用的方法屬于那一個(gè)類對(duì)象只要函數(shù)的參數(shù)個(gè)數(shù)與返回類型與代表元對(duì)象一致。這樣說(shuō)可能比較抽象我下面舉幾個(gè)簡(jiǎn)單的例子希望能給廣大初學(xué)者一些基本的認(rèn)識(shí)。
    //定義一個(gè)返回值為string的無(wú)參數(shù)的代表元
     注意這個(gè)代表元只能引用對(duì)象中
     返回值為string的無(wú)參數(shù)方法
       delegate string MyDelegate();
       public class MyClass
       {
       public string SayHello()
       {
       return "Hello the world!";
       }
       
       }
       public class TestMyClass
       {
       public static void Main(string[] args)
       {
       MyClass myClass1=new MyClass();
       MyDelegate myDelegate1=new MyDelegate(myClass1.SayHello);
       //下面就使用myDelegate1代替對(duì)象myClass1的SayHello方法
       System.Console.WriteLine(myDelegate1());
       //輸出結(jié)果為hello the world!
     與調(diào)用myClass1.SayHello();效果相同
       }
       }
    如果代表元只有這點(diǎn)功能它就沒(méi)有什么太大的用處了,代表元還有一個(gè)非常有用的功能就是定義復(fù)合代表元對(duì)象只有同樣類型的代表元才能夠復(fù)合起來(lái) + 能定義復(fù)合代表元對(duì)象 - 從一個(gè)復(fù)合代表元中去掉一個(gè)代表元對(duì)象:
    delegate void MyDelegate(string s);
       public class MyClass
       {
       public void SayHello(string who)
       {
       System.Console.WriteLine( who+"hello!");
       }
       public void SayGoodBye(string who)
       {
       System.Console.WriteLine( who+"good bye!");
       }
       
       }
       
       public class TestMyClass
       {
       public static void Main(string[] args)
       {
       MyClass myClass1=new MyClass();
       MyDelegate myDelegate,myDelegate1;
       myDelegate=new MyDelegate(myClass1.SayHello);
       myDelegate1=new MyDelegate(myClass1.SayGoodBye);
       myDelegate+=myDelegate1;
       //這樣調(diào)用myDeletage就相當(dāng)于同時(shí)調(diào)用了
     myClass1.SayHello和myClass1.SayGoodBye
       myDelegate("love.net ");
       //執(zhí)行結(jié)果輸出love.net hello! love.net good bye!
       }
       }