lambda表达式与委托与线程初步谈论-基于刘铁锰视频观后操作
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//线程 using System.Threading;//引用线程方法namespace ConsoleApplication2 {class Program{static void Main(string[] args){//委托详解//Func返回带参数类型的委托方法且当方法含有多个参数时需要调用泛型<参数1,参数2……等等,最后加上返回值参数>//Action返回不带参数类型的委托方法且当方法含有多个参数时与一样Func一样需要调用泛型<参数1,参数2……等等>//var func = new Func<int,int,int>(Add);//int sc = func(3,4);//Console.WriteLine("{0}++", sc);//var action = new Action<double,int>(Getround);//Console.WriteLine("{0}",action);//action.Invoke(3.14,5); //ProductFactory productFactory = new ProductFactory();//WrapFactory warpFact = new WrapFactory();////定义委托去获得产品的名称//Func<Product> Product1 = new Func<Product>(productFactory.Father);//返回Product的类型的产品名称//Func<Product> Product2 = new Func<Product>(productFactory.Mother);//模板方法 //logger newlog=new logger();////action委托将事件记录器当做参数去记录//Action<Product> log = new Action<Product>(newlog.Logger);//回调方法////将委托得到名称产品复制到box的产品信息中//Box box1 = warpFact.WrapProduct(Product1,log);//工厂包装以这个产品名称的产品两个参数//Box box2 = warpFact.WrapProduct(Product2,log);//Console.WriteLine(box1.Product.Name);//Console.WriteLine(box2.Product.Name);//lambda表达式应用//(x, y) => { return x + y; }lambda表达式//Dosomething<int>((int x,int y)=>{return x+y;},3,4);//完整版本//Dosomething((x, y) => { return x + y; }, 3, 4);//简化版本因为泛型委托当中含有类型推断所以直接省略了一部分int//多线程://Student stu1 = new Student() { ID = 1,Pencolor=ConsoleColor.Yellow};//Student stu2 = new Student() { ID = 2, Pencolor = ConsoleColor.Green };//Student stu3 = new Student() { ID = 3, Pencolor = ConsoleColor.Red };//stu1.DoHomework();//stu2.DoHomework();//stu3.DoHomework(); //直接同步调用//Action action1 = new Action(stu1.DoHomework);//Action action2 = new Action(stu2.DoHomework);//Action action3 = new Action(stu3.DoHomework);//定义委托//action1.Invoke();//action2.Invoke();//action3.Invoke();//间接同步调用//action1+=action2;//action1+=action3;//action1.Invoke();//多播委托-间接同步调用//Thread thread1 = new Thread(new ThreadStart(stu1.DoHomework));//Thread thread2 = new Thread(new ThreadStart(stu2.DoHomework));//Thread thread3 = new Thread(new ThreadStart(stu3.DoHomework));//thread1.Start();//thread2.Start();//thread3.Start();//显式异步调用//Task task1 = new Task(new Action(stu1.DoHomework));//Task task2 = new Task(new Action(stu2.DoHomework));//Task task3 = new Task(new Action(stu3.DoHomework));//task1.Start();//task2.Start();//task3.Start();//显式异步委托调用//action1.BeginInvoke(null,null);//action2.BeginInvoke(null,null);//action3.BeginInvoke(null,null);//隐式异步委托调用//for (int i = 0; i < 10; i++)//{// Console.ForegroundColor = ConsoleColor.Cyan;// Console.WriteLine("Main thread:{0}", i);// Thread.Sleep(500);//} }//static int Add(int x, int y) {// int s = 0;// s = x + y;// Console.WriteLine("{0}",s);// return s;//}//static void Getround(double x,int y) {// for (int i = 0; i < y; i++) // {// Console.WriteLine("{0}",x);// }//} static void Dosomething<T>(Func<T,T,T> func,T x,T y) {T res=func(x,y);Console.WriteLine(res);}}class Student {//public int ID { get; set; }//字段声明构造器//public ConsoleColor Pencolor { get; set; }//public void DoHomework() //{// for(int i=1;i<=5;i++)// {// Console.ForegroundColor = this.Pencolor;// Console.WriteLine("学生ID:{0},做了{1}小时作业",this.ID,i);// Thread.Sleep(500);// }//} }//class logger// //记录事件触发的情况//{// public void Logger(Product prot) // {// Console.WriteLine("产平名称:{0},产品价格:{1},生产日期:{2}",prot.Name,prot.Price,DateTime.UtcNow);// }//}//class Box//{// //包装产品信息 字段// public Product Product// {// get;// set;// }//}//class Product//{// //生产产品名称 字段// public string Name// {// get;// set;// }// public double Price// {// get;// set;// }//}//class WrapFactory//{// //包装工厂// //实际就是一个方法// public Box WrapProduct(Func<Product> getProduct, Action<Product> log)//定义了一个产品类型的委托// {// Box box = new Box();// Product Product = getProduct.Invoke();//将产品从委托的invoke方法当中获得// if (Product.Price >= 50)// { // log(Product);// }// box.Product = Product;//将产品赋值为box的产品信息使得box有了产品// return box;//返回该产品// }//}//class ProductFactory //{// //需要生产的产品1// public Product Mother()// {// Product Prot = new Product();// Prot.Name = "士力架";// Prot.Price = 78;// return Prot;// }// //需要生产的产品2// public Product Father()// {// Product Prot = new Product();// Prot.Name = "牙膏";// Prot.Price = 12.5;// return Prot;// }//} }
请复制代码后操作,谢谢,此处推荐刘铁锰老师的视频 https://www.bilibili.com/video/av7606481/?p=23 希望能和大家一起进步
转载于:https://www.cnblogs.com/sandaman2019/p/10420654.html
lambda表达式与委托与线程初步谈论-基于刘铁锰视频观后操作相关推荐
- 匿名函数,Lambda表达式,委托
C# 委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.委托( ...
- 使用Lambda表达式重构委托
1.事件 通常写法(C# 1.0) this.button.Click +=new EventHandler(button_Click); void button_Click(object sende ...
- java8学习之Lambda表达式深入与流初步
Lambda表达式深入: 在上一次[http://www.cnblogs.com/webor2006/p/8135873.html]中介绍Lambda表达式的作用时,其中说到这点: 如标红处所说,既然 ...
- 委托、Lambda表达式和事件
1. 引用方法 委托是寻址方法的.NET版本.在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托 ...
- C# 委托,匿名方法,lambda表达式使用方法
在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法. C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式. ...
- C# 学习笔记之委托、lambda表达式
委托是寻址方法的.NET 版本.在CH中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托完全不同,委托是 ...
- [c#菜鸟]lambda表达式
what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...
- lambda表达式java_Lambda表达式Java教程
lambda表达式java 在本文中,我们提供了全面的Lambda Expressions Java教程. 1. Lambda Expressions Java教程–简介 Lambda表达式被认为是J ...
- Lambda表达式Java教程
在本文中,我们提供了全面的Lambda Expressions Java教程. 1. Lambda Expressions Java教程–简介 Lambda表达式被认为是Java 8中引入的最好的功能 ...
最新文章
- jQuery UI vs Kendo UI jQuery Mobile vs Kendo UI Mobile
- 2016012075 谢月月 散列函数的应用及其安全性
- Linux编程之epoll
- birt中文手册在线_QGIS简体中文翻译现状
- bootstrap搜索框_Bootstrap 开源 SVG 图标库 Bootstrap Icons
- Hopfield 神经网络及稳态性的证明
- springbootredis连接池配置优化_spring boot rest 接口集成 spring security(2) – JWT配置
- apt-get pip3
- YDOOK: USB 转 TTL 模块 连线使用实例教程
- 富斯FS_I6六通道遥控器玩转APM飞控失控保护
- 用计算机计算勾股定理,勾股定理公式计算器(勾股定理计算工具)V2018.1.0 官方版...
- crystalReportViewer+ReceiveCrystalReport.rpt+DataSet.xsd做报表 转
- 企业综合安防管理平台
- cad怎么把图层英文变成中文_cad图层英文
- 小红书关键词搜索商品API接口(商品列表数据接口)
- 深度学习Course4第三周Detection Algorithms习题整理
- 印象笔记 Markdown使用指南
- eyoucms如何搬家?易优cms搬家教程
- IT能力框架(模型)
- 最全的 JVM 面试知识点(一):运行时数据区
热门文章
- REVERSE-PRACTICE-BUUCTF-16
- oracle卸数什么是ctrl文件,Oracle数据库的安装和卸载之道
- 织梦php echo 调用金币,dedecms实现任意页面调用当前会员信息的方法
- PointNet++详解与代码
- 两组的数据平均值合并_不要进入数据陷进
- 西门子精智和精简面板区别_西门子S7-1200的功能与特点,应用范围介绍
- java 内部类私有成员 能访问,为什么外部Java类可以访问内部类私有成员?
- 石油计算机测控技术现场总线,中国石油北京《计算机测控技术》第二阶段在线作业...
- java双语试卷_Java程序设计基础(双语)试题题目及答案,课程2021最新期末考试题库,章节测验答案...
- Toad for Oracle 导入MIP.dmp文件时:报内存不足时的解决办法: