小兵 浅谈C#委托<delegate>

mac2022-06-30  29

最近处于面试找工作的阶段,面试中遇到这个问题已经多次,一直想了解,就趁这个机会好好梳理一下啊。 

当提及委托,大多数人第一印象是它相当于C++的函数指针,可以将方法作为参数进行传递,也可以达到函数回调的作用。

委托例子:其实在生活中也有很多这样的例子,例如我们打官司,首先应该找到律师,委托律师去帮我们打官司,这就是委托。在程序中我们可以针对这个例子这样写:

1、首先定义一个委托:public delegate void Lawyer(string matter)   //相当于律师这个角色

2、再声明这个委托:Lawyer lawyer;//这个步骤相当于你具体请的是哪一个律师

3、给委托这个类型赋值,就是指明这个委托需要干一件什么样的事情:

    //声明一个方法

    public static void litagtion(string matter)//matter 代表是一个什么样的事情

   {

          Console.WriteLine(”为{0}进行诉讼“,matter);

   }

    给委托这个类型赋值有二种方法:

     1、实例化直接赋值:Lawyer lawyer=new Lawyer(litagtion);

     2、不用new:Lawyer lawyer=litagtion;(C#2.0引进而来)

4、调用委托:    lawyer(“房产争端”);

 二、Action委托:事实上,.NET Framework现在提供了17个Action委托,它们从无参数到最多16个参数,使用起来非常方便。如果需要返回值,可使用Func函数。如果需要使用ref或out关键字以传引用的方式传递参数,就需要自己定义委托了。

static void Main(string[] args) { Test<string>(Action,"Hello World!"); Test<int>(Action, 1000); Test<string>(p => { Console.WriteLine("{0}", p); }, "Hello World");//使用Lambda表达式定义委托 Console.ReadKey(); } public static void Test<T>(Action<T> action, T p) { action(p); } private static void Action(string s) { Console.WriteLine(s); } private static void Action(int s) { Console.WriteLine(s); }三、Func委托 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: (1) *delegate TResult Func<TResult>(); (2)*delegate TResult Func<T1,TResult>(T1 arg1); (3) *delegate TResult Func<T1,T2,TResult>(T1 arg1, T2 arg2); (4)*delegate TResult Func<T1,T2,T3,TResult>(T1 arg1, T2 arg2, T3 arg3); (5)*delegate TResult Func<T1,T2,T3,T4,TResult>T1 arg1, T2 arg2, T3 arg3, T4 arg4);

转载于:https://www.cnblogs.com/zw-hsy/p/5721400.html

最新回复(0)