委托是对函数原型的包装
委托的申明:
public delegate double MyDelegate (double x)
委托的实例化:
MyDelegated d2 = new MyDelegate(obj.myMethod)
委托的调用:
委托的变量名(参数列表)
d2(8.9)
具体在用的时候
也就是把方法的参数和返回的不同类型的值进行分类
以窗体的画图的例子来说:
可以把实例化的委托封装到一个数组里面:
Fun [] funs = {
new Fun(This.Square),
new Fun(Form1.XPlus),
new Fun(Math.cos),
new Fun(Math.Sqrt)
}
C#4.0版本定义了很多的委托
Action<T1,T2> Func<T1,T2,Tresult>
new Func <double,double>(Math.sin); <参数,返回值>(方法名)
相当于有了一个统一的模板,然后进行委托的申明,实例化,方便统一的调用。
委托的合并---MultiCastDelegate
--一个委托包含了多个函数
--调用委托,就是调用其中的多个函数
--多个函数的先后顺序没有意义
--返回值也就没有大大的意义
运算符+ - += -=
可以动态的增减其中的函数
提高了程序的灵活性
具体在用的时候
D cd1 = new D(C.M1);
D cd2=null;
cd2 += new D(C.M2);
D cd3= cd1+cd2; 把多个函数都包装起来
委托的相等:
判断包含的函数是否一样,来判断委托是否相等
总之:
委托相当于函数指针
但是类型更加的安全,是引用类型
且功能更加的强大,有多播的功能