C#——委托的使用:模板方法和回调方法

委托的使用:将方法作为其他方法参数(方法指针)

作为方法参数的典型使用:模板方法和回调方法

//---------------------------------模板方法和回调方法的使用-------------
    class Program
    {
        static void Main(string[] args)
        {
            Func<Product> func1 = new Func<Product>(MakeFactory.MakeApple);
            Func<Product> func2 = new Func<Product>(MakeFactory.MakeOrange);
            Action<Product> Log = new Action<Product>(Logger.LogRun);
            Box AppleBox=CreatFactory.MakeProduct(func1,Log);
            Box OrangeBox=CreatFactory.MakeProduct(func2,Log);
            Console.WriteLine(AppleBox.Product.name);
            Console.WriteLine(OrangeBox.Product.name);
        }

    }
    class Logger
    {
        public static void LogRun(Product product)
        {
            Console.WriteLine("{0}生产与{1},价格{2}",product.name,DateTime.UtcNow,product.price);
        }
    }
    class Product
    {
        public string name;
        public float price;
    }
    class Box
    {
        public Product Product { get ; set; }
    }
    class CreatFactory
    {
        // 模板方法—传进制作产品的方法就可以,通过调用外部的方法来改变当前方法需要返回的值;
        // 回调方法—传进回调方法,在方法内部控制逻辑判断,根据情况选择是否调用回调方法,以及哪个方法
        public static Box MakeProduct(Func<Product> getProduct,Action<Product> Log)
        {
            Box box=new Box();
            Product product = getProduct.Invoke();
            if (product.price > 8)  //价格大于8的产品调用回调方法Log
                Log.Invoke(product);
            box.Product = product;
            return box;
        }
    }
    //-----------这个类里有制作产品的各种静态方法
    class MakeFactory
    {
        public static Product MakeApple()
        {
            Product apple = new Product();
            apple.name = "Apple";
            apple.price = 5;
            return apple;
        }
        public static Product MakeOrange()
        {
            Product orange = new Product();
            orange.name = "Orange";
            orange.price = 10;
            return orange;
        }
    }

猜你喜欢

转载自blog.csdn.net/noEnoughChief/article/details/80669109