委托是一种引用类型,委托定义了了一类可以被委托实例调用的方法。它定义了方法的返回值类型和参数类型。定义了一个名为FeedBack的委托,返回一个int类型的值,带有一个int类型的参数。可以将任何类型或者结构中与委托类型匹配的方法传递给委托,可以是静态方法也可以是实例方法。如下:
FeedBack fd = MyDelegate.FeedBackToConsole; fd(1); internal delegate void FeedBack(int value); internal class MyDelegate { internal static void FeedBackToConsole(int value) { Console.WriteLine("item=" + value); } }
委托(delegate)提供了一种回调函数的机制,将委托当做参数传递给另外一个方法。委托的回调方法是类型安全的。如下的例子中定义了一个返回值为void的委托FeedBack,委托指定的方法接收一个int类型的参数。MyDelegate类定义了一个静态方法Counter,这个方法接收from,to两个int类型的参数和一个 FeedBack类型的委托fb,他是一个FeedBack委托对象的引用。如果fb的变量不为null,就调用由fb变量指定的回调方法。
FeedBack(MyDelegate.FeedBackToConsole); MyDelegate.Counter(1, 5, fd); internal delegate void FeedBack(int value); internal class MyDelegate { internal static void Counter(int from, int to, FeedBack fb) { for (int val = from; val < to; val++) { if (fb != null) fb(val); } } /// <summary> /// 回调方法 /// </summary> /// <param name="value"></param> internal static void FeedBackToConsole(int value) { Console.WriteLine("item=" + value); } }
委托可以调用多个方法,称为多播委托。使用加法运算符或加法赋值运算符(“+”或“+=”)像委托列表添加新的方法,使用减法运算符或减法赋值运算符(- 或 -=)删除委托列表中的方法。委托会按照添加的顺序依次触发。如果一个多播委托拥有费void类型的返回值,则调用者从最后一个触发的方法接收返回值。
MyDelegate d = MyDelegateMethod.Method1; d += MyDelegateMethod.Method2; d = d - MyDelegateMethod.Method2; public delegate void MyDelegate(int p); internal class MyDelegateMethod { internal static void Method1(int value) { Console.WriteLine("item=" + value); } internal static void Method2(int value) { Console.WriteLine("item=" + value); } }
委托可以包含泛型类型的参数:
public delegate T OtherDelegate<T>(T p);
Func和Action委托
Action是无返回值的泛型委托,Action<int,int> 表示定义一个无返回值接收2个int类型的参数的委托。
Func是有返回值的泛型委托,Func<int>表示定义一个无参数,返回值为int类型的委托。Func<String,int>表示接收一个String类型参数,返回值为int的委托。
标签:复习,委托,C#,void,笔记,int,internal,value,FeedBack From: https://www.cnblogs.com/fangyangwa/p/17256074.html