C#学习笔记之——委托(delegate)

来源:互联网 发布:sql强数据库破解路由器 编辑:程序博客网 时间:2024/06/05 01:52

菜鸟教程-委托

定义一个委托

<访问修饰符> delegate <返回类型> <委托名> (<参数列表>)

访问修饰符不是必须的

public delegate int MyDelegate (int s);
委托也可以有泛型


可以这样实例化

printString ps1 = new printString(WriteToScreen);printString ps2 = new printString(WriteToFile);
printString ps1;ps1 = WriteToScreen;

还可以不取名字,不单独写函数,如果是只需要用一次的情况,这样可以更方便

printString = delegate (int a) {  函数体}


多播

委托对象可使用 "+" 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。"-" 运算符可用于从合并的委托中移除组件委托。
使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的 多播(multicasting),也叫组播。

public delegate void Greeting (string name);public static void ChineseGreeting(string name){Console.WriteLine (name + "先生你好!");}public static void JapaneseGreeting(string name){Console.WriteLine ("{0}さん、こんにちは",name);}

GreetingDelegate greet;greet = ChineseGreeting;greet += JapaneseGreeting;greet ("李");
这样会输出

李先生你好!

李さん、こんにちは

当然用-=就会去掉,不过如果去掉本来没在greet里面的,比如写greet -= EnglishGreeting也不会报错


原创粉丝点击