委托 也叫代表,代表一类方法。而这一类方法都具有相同的 修饰符、形参以及 返回值类型。
1. 委托 既是方法,声明委托的方式如下:在修饰符后加上 delegate ['dɛlɪɡət]关键字
1 public delegate void Del(string message);
从格式上看,它与方法的声明极为相似,就是多了个 delegate关键字而已。它表示声明了一类,修饰符为public、一个string类型形参的、没有返回值的方法。
2. 但 委托 不是普通的方法,因为 它也是类, 所以委托只能声明,而不能定义,如不能这样写:
private
delegate
void
Doing(
string
name){
System.Windows.MessageBox.Show();
}
3. 实例化委托,调用委托
1 //声明一个void, 形参是string的委托 2 public delegate void Del(string name); 3 4 //定义一个cut方法 5 public void cut(string name) 6 { 7 System.Windows.MessageBox.Show("fuck " + name); 8 } 9 //实例化委托,传的参数是一个方法的名字,这里是cut 10 Del a = new Del(cut); 11 a("CCC");//调用委托,相当于调用cut("CCC");
4. 委托 有什么用,搞这么复杂有什么意思
将方法名作为方法参数传递,提高代码的多变性和灵活性; 委托 主要用于事件 还有回调函数中····
5. 委托 的多播 (Multicasting of a Delegate) 操作"+="、"-="
1 using System; 2 3 delegate int NumberChanger(int n); 4 namespace DelegateAppl 5 { 6 class TestDelegate 7 { 8 static int num = 10; 9 public static int AddNum(int p) 10 { 11 num += p; 12 return num; 13 } 14 15 public static int MultNum(int q) 16 { 17 num *= q; 18 return num; 19 } 20 public static int getNum() 21 { 22 return num; 23 } 24 25 static void Main(string[] args) 26 { 27 // 创建委托实例 28 NumberChanger nc; 29 NumberChanger nc1 = new NumberChanger(AddNum); 30 NumberChanger nc2 = new NumberChanger(MultNum); 31 nc = nc1; 32 nc += nc2;//到这里,nc其实绑定了2个委托,调用时会按绑定的顺序执行 33 // 调用多播 34 nc(5); 35 Console.WriteLine("Value of Num: {0}", getNum()); 36 Console.ReadKey(); 37 } 38 } 39 }
注意:委托对象可使用 "+=" 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。
"-=" 运算符可用于从合并的委托中移除组件委托。