C#_委托类型以及Action/Fanc_2018Oct
委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托特别用于实现事件和回调方法。所有的委托都派生自 System.Delegate 类。
(简单说就是委托是一个空壳,调用委托就是对其赋值(值为某一方法)并执行该值;)
简单实现五步骤:
1.声明委托类; -->(如: public delegate void MyDelegate();)
2.定义目标函数 ; --> (即写一个或多个需要委托去执行的方法,此方法必须和委托返回值类型和参数类型保持一致)
3.声明一个委托变量; -->(MyDelegate deleg;)
4.将目标函数赋值给委托类; -->(一般用+/-=符号进行赋值;如 deleg=method1; deleg+= method2;)
5.调用委托,执行目标方法; -->(deleg(); // 执行方法为method1 和 method2)
C#库中有两个做好的委托 ( Action / Fanc )
Action
只代表void类型的方法
格式 :
action
action<参数>
参考代码:
public static void SayHi() { Console.WriteLine("sayHi"); } public static void SayHiOnePar(int number) { Console.WriteLine("SayHiOnePar"); } public static void Main(string[] args) { //委托看的是方法返回值类型和参数类型 //只要满足该类型的方法都能委托 Action action = SayHi; action(); Action<int> action01 = SayHiOnePar; action01(10); }
Fanc
针对有返回值类型的
格式:
Func<参数,参数,参数.....返回值类型>
参考代码:
public static string TestStr() { Console.WriteLine("无参数 有返回值"); return string.Empty; } public static float TestFloat(int i, double d) { Console.WriteLine("两个参数 一个返回值"); return 15.5f; } public static void Main(string[] args) { //一个代表返回值类型 Func<string> func01 = TestStr; func01(); Func<int, double, float> func02 = TestFloat; func02(10, 15.5); }