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 产品;
}
}
}
委托练习----
最新推荐文章于 2025-11-02 16:31:54 发布
637

被折叠的 条评论
为什么被折叠?



