委托的使用:将方法作为其他方法参数(方法指针)
作为方法参数的典型使用:模板方法和回调方法
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)
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;
}
}