当要把方法作为参数传递传递给其他方法时,就需要委托。
使用委托时,需要两个步骤:声明委托和注册委托。
1.声明委托就是定义要使用的委托。对于委托,定义它就是告诉编译器这种类型的委托代表了哪种类型的方法(参数类型和返回值类型等)。
定义委托的关键字是delegate,语法如下:
public delegate 返回值 委托名(参数签名)
如:public delegate void WriteMeterial(string material);
和声明一个方法几乎相同,只是在返回值类型面前加一个delegate关键字。添加这个关键字后,就代表这个委托可以引用的参数是一个string数据,返回值是void的所有方法。
2.委托的注册就是将目标方法绑定到委托上。从实际上来讲,委托注册只需使用new关键字创建一个委托类型的新实例,将目标方法名作为参数传递即可。当调用委托时,自动调用目标方法完成委托任务。
从具体应用上来讲,委托的实现分为单委托(只有一次委托)和组合委托(两次包括两次以上的委托)。对于组合委托,当委托被调用时,委托会自动迭代委托列表,依次调用每一个委托。
不管单委托还是组合委托,要使用委托必须进行第一次委托注册,第一次注册的方法是:
委托名 委托对象=new 委托名(目标的方法名;
注意:第一次使用委托用“=”进行委托注册。
如:pwn=new President.WriteMaterial(sellCleck.Write);
取消委托时使用的运算符为“-=”,具体方法是:
委托对象-=目标方法名;
如:pwn-= fanancialCleck.Write;
委托其实就是方法传递一个方法参数。但需要注意以下方面:
1⃣️注册到委托的方法参数个数和类型以及返回值类型必须和声明委托时的参数和返回值类型定义一致。
2⃣️注册到委托的方法必可以是实例方法,也可以是静态方法。
3⃣️可以根据需要为一个委托注册多个方法,此时调用委托将依次行为其绑定的所有方法。
可以根据需要为一个委托取消方法。
3.委托的好处:委托一旦被调用,委托链中的目标方法就会依次被执行,当委托发生变化时,只需改变主程序中的委托链代码。如果不采用委托链,而是直接调用相关方法的组合。这样代码冗余太大。