委托
委托是一种数据类型。
只有委托这种数据类型才能保存方法变量。既然是数据类型,就可以通过该数据类型声明变量。
不同类型的方法(参数不同,返回值不同),需要使用不同的委托类型来存储,所以
不同类型的方法需要自定义不同类型的委托,就像需要定义不同的类来存储不同对象一样。
委托是不存在重载的
同一个方法则可以使用同一个“委托类型”来存储。
一般委托也直接写在命名空间下,与类是同一个级别的东西。
定义委托的时候,需要制定该委托类型将来要存储的方法的返回值与参数列表。
制定后,该委托类型就只能存储
需要我们弄清楚的是:
委托变量并不是方法,所以不能直接调用。
要想调用委托中保存的方法,需要通过委托变量Invoke来调用
委托的意义,增加了代码的灵活性和可扩展性。“代码注入”作用。
建议在调用委托变量的时候先判断一下是否为null
匿名函数的写法:M2Delegate md=delegate(int x)
{
Return x*100;}
Int result=md(100);
Lambda表达式使用=>()=》左边是方法,右边是表达式。
委托和字符串的特征特别像,而且具有不可变性。
委托每次累加的时候都会创建一个新对象。
多播委托时根据 +,—来控制。
Delegate是所有委托的父类。
一个一个调用多播委托中的方法,
Delegate[] method=md.GetInvocation();
Foreach[Delegate item in methods]
{
MyreturnIntDelegate mrid=itme ad MyreturnIntDelegate()
console.writeLine(mirid())}
泛型委托。
泛型委托的意义:
系统中有两个委托Action和Func
委托的本质:
每个委托都有invocationList字段,多播委托中的东西都放在这个字段当中了。
委托的一些应用:凡是需要回调的地方都能用到委托。