资料源于刘铁猛的C#视频教程

模板方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Del
{public delegate double Calc(double x, double y);//委托是类申明时与类平级class Program{static void Main(string[] args){ProductFactory proFac = new ProductFactory();WrapFactory wrapFac = new WrapFactory();Func<Product> func1 = new Func<Product>(proFac.MakePizza);Func<Product> func2 = new Func<Product>(proFac.MakeToyCar);Box box1 = wrapFac.WrapProduct(func1);Box box2 = wrapFac.WrapProduct(func2);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)//函数模板{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 MakeToyCar(){Product product = new Product();product.Name = "Toy Car";return product;}}
}

回调方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Del
{public delegate double Calc(double x, double y);//委托是类申明时与类平级class Program{static void Main(string[] args){ProductFactory proFac = new ProductFactory();WrapFactory wrapFac = new WrapFactory();Func<Product> func1 = new Func<Product>(proFac.MakePizza);Func<Product> func2 = new Func<Product>(proFac.MakeToyCar);Logger logger = new Logger();Action<Product> log = new Action<Product>(logger.Log);Box box1 = wrapFac.WrapProduct(func1, log);Box box2 = wrapFac.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{//没有返回值的用action委托public Box WrapProduct(Func<Product> getProduct, Action<Product> logCallback){Box box = new Box();Product product = getProduct.Invoke();if (product.Price >= 50){logCallback(product);}box.Product = product;return box;}}class ProductFactory{public Product MakePizza(){Product product = new Product();product.Name = "Pizza";product.Price = 15;return product;}public Product MakeToyCar(){Product product = new Product();product.Name = "Toy Car";product.Price = 150;return product;}}
}

C#委托 模板和回调函数相关推荐

  1. VUE 学习代码 监视和 模板语法回调函数

    文章目录 HelloWorld 模板语法 03_计算属性和监视 HelloWorld <!DOCTYPE html> <html lang="en"> &l ...

  2. Block、委托、回调函数原理剖析(在Object C语境)——这样讲还不懂,根本不可能!...

    开篇:要想理解Block和委托,最快的方法是搞明白"回调函数"这个概念. 做为初级选手,我们把Block.委托.回调函数,视为同一原理的三种不同名称.也就是说,现在,我们把这三个名 ...

  3. 详解C#委托,事件与回调函数

    .Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等. "protected vo ...

  4. C#学习笔记--详解委托,事件与回调函数

    .Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等. "protected vo ...

  5. C#中用委托实现C++的回调函数

    C++中抓图回调函数 void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight, ...

  6. WPF 委托和事件实现子窗口回调函数, 实时刷新主窗口控件

    注册窗口事件, 实时刷新主窗口控件 通常用于子窗口修改数据后实时刷新主窗口的ListView控件的场景 这个demo实现的功能是子窗口的TextBox中的数据实时显示到主窗口的Label 运行效果: ...

  7. 《C和指针》—— 第13章 函数指针的作用1:回调函数2(与模板结合,简化代码)

    注意:此为原创文章,未经同意,请勿随意转载. 目录 1. 问题与思路 2. 具体实现 3. 结果截图 1. 问题与思路 Q:实现一个与类型无关的比较函数,且考虑模板,精简代码 A:声明一个函数指针,函 ...

  8. jQuery回调函数

    1.引言 今天在学习<jQuery基础教程>在学习编写插件的时候,书中说利用回调函数来当参数,会极大的提高程序的灵活性.对回调函数很陌生.研究了一下给的示例程序.感觉对回调函数有了基本的了 ...

  9. JavaScript高级day01-PM【对象、函数、回调函数、IIFE、this、关于语句分号问题、webstorm代码模板、复习】

    笔记.视频.源码:JavaScript(基础.高级)笔记汇总表[尚硅谷JavaScript全套教程完整版] 目   录 P7 07.尚硅谷_JS高级_对象 23:30 1. 什么是对象? 2. 为什么 ...

  10. C++11 lambda表达式、function类模板、bind函数适配器

    文章目录 lambda表达式 lambda表达式的语法 lambda表达式的原理 function模板 function与重载函数 bind函数适配器 lambda表达式 当我们在写代码的时候如果经常 ...

最新文章

  1. 基于uFUN开发板的心率计(一)DMA方式获取传感器数据
  2. 巴斯腾和巴乔谁强一些
  3. python编写测试系统_纯 python 编写的一套 dubbo 测试平台
  4. SQL查询系列之六:SQL模糊查询
  5. CSS3实现烟花特效 --web前端
  6. python中三级菜单讲解_Python字典实现简单的三级菜单(实例讲解)
  7. iOS中XML解析 (二) libxml2(实例:打印xml内容及存储到数组)
  8. 20155209 2016-2017-2 《Java程序设计》第五周学习总结
  9. Android学习——android命名规范
  10. Kaggle 美女小姐姐自述:我是怎么成为竞赛中 Top 0.3% 的?
  11. ubuntu重置root密码
  12. 40行代码的人脸识别实践【转】
  13. 交换机测试组播软件,组播-MVR功能测试
  14. Java之品优购课程讲义_day12(6)
  15. homework5_ZhankunLuo
  16. matlab求矩阵 均值、标准差、最大值以及reshape()函数
  17. Python | 使用Socks5
  18. linux下好看的中文字体,推荐一款 Linux 上比较漂亮的字体(转)
  19. 星星之火-51:LTE的物联网技术,Cat-M与NB-IoT的比较
  20. 用计算机读取三菱PLC程序,电脑如何读取与保存三菱plc数据?

热门文章

  1. mysql 抓包工具_好用的MySQL抓包工具:sniffer-agent
  2. mysql vc调用时内存错误
  3. 360 android 应用市场,360应用市场
  4. oracle授权with,Oracle With 语句语法及示例
  5. nginx启动vue_Docker部署前端Vue
  6. 使用emacs + cscope + ecb替代source insight
  7. 分布式系统的Raft算法 1
  8. 如何根据iframe内嵌页面调整iframe高宽续篇
  9. 面试复习笔记二(javaweb)
  10. TypeScript 素描 - 类