C#委托与匿名方法浅析

在c# 里面我们可以用委托去调用相同方法签名的方法,仔细想想,也就是相当于c语言的函数指针的概念。因为c#继承了太多c的功能,如结构体,重载运算符,预编译指令,等等。简直就是c语言的变种。
大家记住,就把委托想象成装载相同性质的函数的容器,然后利用容器,去访问你刚刚装在进去的函数,就是这么简单。首先用关键字delegate去定义一个委托容器,如下

public delegate string BuyDelegate(int money);

就相当于定义一个普通的方法,然而没有方法体,为什么没有方法体?因为它本身就是委托别的方法执行逻辑的,所以不需要方法体去实现自己的具体逻辑。
然后我们实现一个静态方法,与上面定义好的委托要有享用的函数参数,函数参数个数,以及 returnType(返回类型)。

 public static string BuyCorei3(int money) {
            return "core-i3 money:"+money;
        }

然后装载这个函数到委托,再用委托实例触发调用 如下

BuyDelegate buy = new BuyDelegate(BuyCorei3);//装载,
buy(1100);//用委托触发函数

好了,就是这么简单,下面贴上完整代码,附带 匿名方法实现委托实例。

using System;

namespace ConsoleApp1
{
    public delegate string BuyDelegate(int money);
    class Program
    {
        static void Main(string[] args)
        {
            BuyCPU(500);//里面封装了委托调用
            BuyDelegate buy = delegate (int money)//这个用delegate 关键字 定义的方法相当与匿名方法,可以构建委托对象用。
            {
                return "xiaomi smartphone money:" + money;
            };
            Console.WriteLine(buy(1250));
            Console.ReadKey();
        }
        
        public static string BuyDog(int money) {
            return "a small dog money:" + money;
        }

        public static string BuyCorei3(int money) {
            return "core-i3 money:"+money;
        }
        public static string BuyCorei5(int money) {
            return "core-i5 money:"+money;
        }
        public static string BuyCorei7(int money) {
            return "core-i7 money:"+money;
        }
        public static void BuyCPU(int money) {
            BuyDelegate buy=null;
            if (money < 1000)
            {
               buy = new BuyDelegate(BuyCorei3); 
            }
            else if (money < 2000)
            {
                buy = new BuyDelegate(BuyCorei5);
            }
            else {
                buy = new BuyDelegate(BuyCorei7);
            }
            Console.WriteLine(buy(money));
        }

        public static void CalculateTime(BuyDelegate buy,int money) {//这个方法可以对所有相同性质的函数做前后拦截,相当于装饰设计模式。
            long currentTicks = DateTime.Now.Ticks;
            buy(money);
            long spendTimes = DateTime.Now.Ticks - currentTicks;
            Console.WriteLine("time spend:"+spendTimes);
        }
       
    }
}

你可能感兴趣的:(c#,delegate)