static void Main(string[] args) { //------------------------------------------------------------------------------法1 //DelSayhi del=new DelSayhi (SayhiChinese ); //☆☆☆☆☆☆☆☆☆☆☆☆注意函数名直接赋值给委托,不需要在函数名之后加括号 //Sayhi("张三", del); //委托就是为把一个函数当参数,但这样不明显 //------------------------------------------------------------------------------法2 //可以直接把一个函数给委托 //DelSayhi del = SayhiChinese; //☆☆☆☆☆☆☆☆☆☆☆☆☆注意函数名直接赋值给委托,不需要在函数名之后加括号 //Sayhi("张三", del); //------------------------------------------------------------------------------法3 //既然可以法2 ,那干脆直接如下,这样你就可以发现函数作为了参数 //Sayhi ("张三", SayhiChinese); //------------------------------------------------------------------------------多播委托 //委托可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托, //这就是---多播委托 //当调用这个委托的时候,将依次调用其所绑定的方法。在这个例子中,语法如下 //DelSayhi del=new DelSayhi (SayhiChinese ); //del += SayhiEnglish;//使用+=给此委托变量再绑定一个方法 //Sayhi("张三", del); //-------------------------------------------------------------------------------取消绑定 //既然给委托可以绑定一个方法, //那么也应该有办法取消对方法的绑定,很容易想到,这个语法是“-=”: //DelSayhi del = new DelSayhi(SayhiChinese); //del += SayhiEnglish;//使用+=给此委托变量再绑定一个方法 //Sayhi("张三", del); //del -= SayhiChinese;//使用-=给此委托变量取消绑定一个方法 //Sayhi("张三风", del); //不使用SayHi函数,在新建了了委托对象后直接使用委托作函数 //注:当然我们知道可以在这里直接使用SayhiChinese和SayHiEnglish俩个函数,我们在这里就是举例子 DelSayhi del = new DelSayhi(SayhiChinese); if (null != del)//注意调用委托的时候一定要先判断委托是否为空,为空时会抛异常 { del("张三"); } Console.ReadKey(); }
static void Main(string[] args) { //从项目01委托定义中,我们知道新建委托对象直接做函数 //DelSayhi del = new DelSayhi(SayhiEnglish);//简写为DelsayHi del=SayHiEnglish; //del("张三"); //那我们是不是可以直接结合匿名函数,把 SayhiChinese和SayhiEnglish直接省略, //在新建委托对象时建立一个相同功能的匿名函数 //注意匿名函数的参数类型和个数,返回值必须和委托一样 //DelSayhi del = delegate(string name) { Console.WriteLine("Hello" + name); }; //del("张三"); //Console.ReadKey(); //使用Lambda语句赋值委托 DelSayhi del = (string name) => { Console.WriteLine("Hello" + name); }; del("张三"); Console.ReadKey(); }
static void Main(string[] args) { // DelSayhi del = SayHiTaiwanese; // del("ABC"); // Test("台灣",SayHiTaiwanese); // Test("Yo", delegate (string name) // { // System.Console.WriteLine("吃飯沒" + name); // }); // DelSayhi del = delegate (string name) // { // System.Console.WriteLine("你好" + name); // }; // del("Alex"); DelSayhi del = (string name) => { System.Console.WriteLine("你好" + name); }; del("Amy"); }
/// <summary> ///这个函数就是为了把下面两个函数SayhiChinese和SayhiEnglish统一起来 ///我想在这个函数中调用这两个函数,也就是有一个函数作为参数,但具体哪一个不确定 ///所以我定义了一个委托DelSayhi指向这两个函数 /// </summary> /// <param name="name"></param> public static void Sayhi(string name, DelSayhi del) { del(name); }