C#委托 模板和回调函数
资料源于刘铁猛的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#委托 模板和回调函数相关推荐
- VUE 学习代码 监视和 模板语法回调函数
文章目录 HelloWorld 模板语法 03_计算属性和监视 HelloWorld <!DOCTYPE html> <html lang="en"> &l ...
- Block、委托、回调函数原理剖析(在Object C语境)——这样讲还不懂,根本不可能!...
开篇:要想理解Block和委托,最快的方法是搞明白"回调函数"这个概念. 做为初级选手,我们把Block.委托.回调函数,视为同一原理的三种不同名称.也就是说,现在,我们把这三个名 ...
- 详解C#委托,事件与回调函数
.Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等. "protected vo ...
- C#学习笔记--详解委托,事件与回调函数
.Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等. "protected vo ...
- C#中用委托实现C++的回调函数
C++中抓图回调函数 void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight, ...
- WPF 委托和事件实现子窗口回调函数, 实时刷新主窗口控件
注册窗口事件, 实时刷新主窗口控件 通常用于子窗口修改数据后实时刷新主窗口的ListView控件的场景 这个demo实现的功能是子窗口的TextBox中的数据实时显示到主窗口的Label 运行效果: ...
- 《C和指针》—— 第13章 函数指针的作用1:回调函数2(与模板结合,简化代码)
注意:此为原创文章,未经同意,请勿随意转载. 目录 1. 问题与思路 2. 具体实现 3. 结果截图 1. 问题与思路 Q:实现一个与类型无关的比较函数,且考虑模板,精简代码 A:声明一个函数指针,函 ...
- jQuery回调函数
1.引言 今天在学习<jQuery基础教程>在学习编写插件的时候,书中说利用回调函数来当参数,会极大的提高程序的灵活性.对回调函数很陌生.研究了一下给的示例程序.感觉对回调函数有了基本的了 ...
- JavaScript高级day01-PM【对象、函数、回调函数、IIFE、this、关于语句分号问题、webstorm代码模板、复习】
笔记.视频.源码:JavaScript(基础.高级)笔记汇总表[尚硅谷JavaScript全套教程完整版] 目 录 P7 07.尚硅谷_JS高级_对象 23:30 1. 什么是对象? 2. 为什么 ...
- C++11 lambda表达式、function类模板、bind函数适配器
文章目录 lambda表达式 lambda表达式的语法 lambda表达式的原理 function模板 function与重载函数 bind函数适配器 lambda表达式 当我们在写代码的时候如果经常 ...
最新文章
- 基于uFUN开发板的心率计(一)DMA方式获取传感器数据
- 巴斯腾和巴乔谁强一些
- python编写测试系统_纯 python 编写的一套 dubbo 测试平台
- SQL查询系列之六:SQL模糊查询
- CSS3实现烟花特效 --web前端
- python中三级菜单讲解_Python字典实现简单的三级菜单(实例讲解)
- iOS中XML解析 (二) libxml2(实例:打印xml内容及存储到数组)
- 20155209 2016-2017-2 《Java程序设计》第五周学习总结
- Android学习——android命名规范
- Kaggle 美女小姐姐自述:我是怎么成为竞赛中 Top 0.3% 的?
- ubuntu重置root密码
- 40行代码的人脸识别实践【转】
- 交换机测试组播软件,组播-MVR功能测试
- Java之品优购课程讲义_day12(6)
- homework5_ZhankunLuo
- matlab求矩阵 均值、标准差、最大值以及reshape()函数
- Python | 使用Socks5
- linux下好看的中文字体,推荐一款 Linux 上比较漂亮的字体(转)
- 星星之火-51:LTE的物联网技术,Cat-M与NB-IoT的比较
- 用计算机读取三菱PLC程序,电脑如何读取与保存三菱plc数据?