小兵 浅谈C#委托<delegate>

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

当提及委托,大多数人第一印象是它相当于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值