一,理解将方法作为方法的参数
首先定义一个委托修饰符是delegate如下代码
//定义委托,它定义了可以代表的方法的类型
public delegate void NewDelegate(string name);
然后将参数绑定到委托里
public void One(string x) {
Console.WriteLine("输出1:, " + x);
}
//需要使用委托执行的方法1
public void Two(string x) {
Console.WriteLine("输出2:, " + x);
}
//这里的两个参数分别是传入的某个参数和我们之前定义的委托
public void GreetPeople(string x, GreetingDelegate MakeGreeting){
MakeGreeting(x);
}
static void Main(string[] args) {
NewDelegate delegate1, delegate2;
delegate1 = One;
delegate2 = Two;
//这里对应的是参数和执行的某个委托
GreetPeople("HELLO1", delegate1);
GreetPeople("HELLO2", delegate2);
//当然也可以忽略GreetPeople方法直接执行委托
delegate1 ("HELLO1");
delegate2 ("HELLO2");
Console.ReadKey();
}
输出为:
输出1:HELLO1
输出2:HELLO2
委托不同于string的一个特性:可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。在这个例子中,语法如下:
static void Main(string[] args) {
NewDelegate delegate;
delegate = One; // 先给委托类型的变量赋值
delegate += Two; // 给此委托变量再绑定一个方法
// 将先后调用 One与 Two方法
GreetPeople("HELLO", delegate1);
Console.ReadKey();
}
输出为:
输出1:HELLO
输出2:HELLO
//同时 +=可以在绑定一个方法 -=也可以取消绑定的方法
static void Main(string[] args) {
NewDelegate delegate;
delegate = One; // 先给委托类型的变量赋值
delegate += Two; // 给此委托变量再绑定一个方法
delegate -= Two; // 给此委托变量再绑定一个方法
// 将先后调用 One与 Two方法
GreetPeople("HELLO", delegate1);
Console.ReadKey();
}
输出为:
输出1:HELLO
让我们再次对委托作个总结:
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
一,事件的理解
事件其实没什么不好理解的,声明一个事件不过类似于声明一个进行了封装的委托类型的变量而已。
委托、事件与Observer设计模式我写了一个案例以便大家理解
https://download.csdn.net/download/q944468002/12095644