1:委托
我们定义一段代码:Person obj = new Person (); ,就是说 obj 这个【引用】类型指向了一个新的对象 【 new Person ()】
同样的,委托也是一种【引用】类型,一种能够指向方法的类型。在方法中有无参数的方法和带参数的方法,参数也是一种类型,所以我们就可以将这种 ”委托类型”,传入到方法中。通俗点说:委托可以代表一个方法或多个方法(多播委托)。
namespace 多播委托
{
public delegate void DelTest1( string s );//申明一个委托(委托可以指向多个方法),申明的委托要与被委托的方法具有相同的签名;
class Program
{
static void Main(string[] args)
{
DelTest1 dels = Test1;
/ /dels += Test2; / /多播委托 ,dels这个委托可以指向多个方法,这里不注释的话控制台显示两个方法的输出
dels ("李梅");//最后会在控制台输出 Hell李梅 (这里调用了委托,也可以将委托传入方法)
Console.ReadKey();
}
public static void Test1( string s ){ Console.WriteLine("Hello" + s) ; } / /被委托的方法
public static void Test2( string s ){ Console.WriteLine("你好啊" + s) ; }
}
}
在上面代码中 / /dels += Test2; 这段代码 变为dels = Test2; 那么只会输出Test2的内容,也就是说吧 += 变为 =,会覆盖以前委托的内容。
2:事件: 是一个委托类型的实列,只能在定义它的类的内部来进行访问。在类外面智能注册事件的响应方法。
在类的内部定义事件 :public event DelTest1 DelTest1Event; / /定义了一个事件,在类的外部给事件添加事件响应方法,可以理解为一个私有的委托实列,给事件添加事件方法是和委托是一样的。