委托,相当于函数指针,是对方法的包装,把方法包装成变量就是定义声明委托变量,把它作为参数传给其他方法就是调用委托。
首先,Action和Func是C#类库中已经定义好的委托,
public delegate double Cal(double a, double b);
public static void Main(string[] args)
{
Claculator claculator = new Claculator();
Action action = new Action(claculator.Show);
action.Invoke();
Func<double, double, double> func = new Func<double, double, double>(claculator.Add);//传入两个double类型的参数,返回值为double
double result = func.Invoke(12, 13);
Console.WriteLine(result is double);
Cal cal = new Cal(claculator.Sub);
result = cal.Invoke(13, 12);
}
class Claculator
{
public void Show()
{
Console.WriteLine("加法与减法");
}
public double Add(double a,double b)
{
return a + b;
}
public double Sub(double a,double b)
{
return a - b;
}
}
这是一个简单的调用action func委托和自定义委托的例子,action可以是一个无传参,无返回值的委托,而func的最后一个表示返回值类型,前面的为传入的参数.
使用委托的注意事项
委托与所封装的方法要类型一致,委托是一种类,所以他的声明与类同级,不能嵌套在类里。
委托的方法级别的紧耦合,即相互调用的方法之间产生了相互依赖的关系,一旦某个方法出现bug,调用它的方法也无法工作
过多使用委托,使代码的可读性下降,debug难度增加
使用委托不当,还会造成内存泄漏和性能下降