委托练习----

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//模板方法
namespace 自定义委托
{
    internal class Program
    {
        static void Main(string[] args)
        {
            产品工厂 产品工厂 = new 产品工厂();
            包装工厂 包装工厂 = new 包装工厂();

            Func<产品类> func1 = new Func<产品类>(产品工厂.生产披萨);
            Func<产品类> func2 = new Func<产品类>(产品工厂.生产汽车);

            日志 日志 =new 日志();
            Action<产品类> action = new Action<产品类>(日志.日志打印);

            包装箱类 包装箱1 = 包装工厂.箱子(func1, action);
            包装箱类 包装箱2 = 包装工厂.箱子(func2, action);
            Console.WriteLine(包装箱1.产品.名字);
            Console.WriteLine(包装箱2.产品.名字);
            Console.ReadLine();

        }
    }


    /// <summary>
    /// 使用回调方法打印日志
    /// </summary>
    public class 日志
    { 
        public void 日志打印(产品类 产品)
        {

            Console.WriteLine("产品-{0} 在 {1} 被生产打包出来", 产品.名字, DateTime.UtcNow.ToString());    

        }
    
    
    }

    public class 产品类
    {
        public string 名字 { get; set; }
        public double 价格 {  get; set; }
    }

    public class 包装箱类
    {
        //包装箱里面的产品名字
        public 产品类 产品 { get; set; }

        public double 价格 { get; set; }
    }



    /// <summary>
    /// 模板方法
    /// </summary>
    class 包装工厂  //负责把产品包上盒子送给用户
    {
        public 包装箱类 箱子(Func<产品类> get产品 , Action<产品类> 日志)
        {
            包装箱类 包装箱 = new 包装箱类();
 
            产品类 产品 = get产品.Invoke();


            if (产品.价格>10)
            {
                日志.Invoke(产品);
            }
            包装箱.产品 = 产品;

            return 包装箱;
        }
    }











    class 产品工厂
    {
        //这个方法生产披萨
        public 产品类 生产披萨()
        {
            产品类 产品 = new 产品类();
            产品.名字 = "披萨";
            产品.价格=100;
            return 产品;

        }
        //这个方法生产汽车
        public 产品类 生产汽车()
        {
            产品类 产品 = new 产品类();
            产品.名字 = "汽车";
            产品.价格 = 200;
            return 产品;
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值