学习视频:视频地址
Action委托:无返回值的 Func 委托:有返回值的
自定义委托 delegate:模板方法、回调方法
模板方法:实现了代码的重复使用 //模板方法 static void Main(string[] args) { ProductFactory productFactory = new ProductFactory(); WrapFactory wrapFactory = new WrapFactory(); Func<Product> func1 = new Func<Product>(productFactory.MakePizza); Func<Product> func2 = new Func<Product>(productFactory.MakeCar); Box box1=wrapFactory.WrapProduct(func1); Box box2 = wrapFactory.WrapProduct(func2); Console.WriteLine(box1.Product.Name); Console.WriteLine(box2.Product.Name); } } class Product { public string Name { get; set; } } class Box { public Product Product { get; set; } } class WrapFactory { public Box WrapProduct(Func<Product> getProduct) { Box box = new Box(); Product product = getProduct.Invoke(); box.Product = product; return box; } } class ProductFactory { public Product MakePizza() { Product product = new Product(); product.Name = "Pizza"; return product; } public Product MakeCar() { Product product = new Product(); product.Name = "Car"; return product; } } 回调方法 //回调方法 static void Main(string[] args) { ProductFactory productFactory = new ProductFactory(); WrapFactory wrapFactory = new WrapFactory(); Func<Product> func1 = new Func<Product>(productFactory.MakePizza); Func<Product> func2 = new Func<Product>(productFactory.MakeCar); Logger logger = new Logger(); Action<Product> log = new Action<Product>(logger.Log); Box box1=wrapFactory.WrapProduct(func1, log); Box box2 = wrapFactory.WrapProduct(func2, log); Console.WriteLine(box1.Product.Name); Console.WriteLine(box2.Product.Name); } } class Logger { public void Log(Product product) { Console.WriteLine("Product'{0}' created at {1}.Price is {2}", product.Name, DateTime.UtcNow, product.Price); } } class Product { public string Name { get; set; } public double Price { get; set; } } class Box { public Product Product { get; set; } } class WrapFactory { public Box WrapProduct(Func<Product> getProduct,Action<Product> logCallback) { Box box = new Box(); Product product = getProduct.Invoke(); if (product.Price > 50) { logCallback.Invoke(product); } box.Product = product; return box; } } class ProductFactory { public Product MakePizza() { Product product = new Product(); product.Name = "Pizza"; product.Price = 12; return product; } public Product MakeCar() { Product product = new Product(); product.Name = "Car"; product.Price=100; return product; } }串行<=>同步<=>单线程;并行<=>异步<=>多线程
