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表达式与委托与线程初步谈论-基于刘铁锰视频观后操作相关推荐

  1. 匿名函数,Lambda表达式,委托

    C# 委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.委托( ...

  2. 使用Lambda表达式重构委托

    1.事件 通常写法(C# 1.0) this.button.Click +=new EventHandler(button_Click); void button_Click(object sende ...

  3. java8学习之Lambda表达式深入与流初步

    Lambda表达式深入: 在上一次[http://www.cnblogs.com/webor2006/p/8135873.html]中介绍Lambda表达式的作用时,其中说到这点: 如标红处所说,既然 ...

  4. 委托、Lambda表达式和事件

    1. 引用方法 委托是寻址方法的.NET版本.在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托 ...

  5. C# 委托,匿名方法,lambda表达式使用方法

    在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法. C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式. ...

  6. C# 学习笔记之委托、lambda表达式

    委托是寻址方法的.NET 版本.在CH中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托完全不同,委托是 ...

  7. [c#菜鸟]lambda表达式

    what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...

  8. lambda表达式java_Lambda表达式Java教程

    lambda表达式java 在本文中,我们提供了全面的Lambda Expressions Java教程. 1. Lambda Expressions Java教程–简介 Lambda表达式被认为是J ...

  9. Lambda表达式Java教程

    在本文中,我们提供了全面的Lambda Expressions Java教程. 1. Lambda Expressions Java教程–简介 Lambda表达式被认为是Java 8中引入的最好的功能 ...

最新文章

  1. jQuery UI vs Kendo UI jQuery Mobile vs Kendo UI Mobile
  2. 2016012075 谢月月 散列函数的应用及其安全性
  3. Linux编程之epoll
  4. birt中文手册在线_QGIS简体中文翻译现状
  5. bootstrap搜索框_Bootstrap 开源 SVG 图标库 Bootstrap Icons
  6. Hopfield 神经网络及稳态性的证明
  7. springbootredis连接池配置优化_spring boot rest 接口集成 spring security(2) – JWT配置
  8. apt-get pip3
  9. YDOOK: USB 转 TTL 模块 连线使用实例教程
  10. 富斯FS_I6六通道遥控器玩转APM飞控失控保护
  11. 用计算机计算勾股定理,勾股定理公式计算器(勾股定理计算工具)V2018.1.0 官方版...
  12. crystalReportViewer+ReceiveCrystalReport.rpt+DataSet.xsd做报表 转
  13. 企业综合安防管理平台
  14. cad怎么把图层英文变成中文_cad图层英文
  15. 小红书关键词搜索商品API接口(商品列表数据接口)
  16. 深度学习Course4第三周Detection Algorithms习题整理
  17. 印象笔记 Markdown使用指南
  18. eyoucms如何搬家?易优cms搬家教程
  19. IT能力框架(模型)
  20. 最全的 JVM 面试知识点(一):运行时数据区

热门文章

  1. REVERSE-PRACTICE-BUUCTF-16
  2. oracle卸数什么是ctrl文件,Oracle数据库的安装和卸载之道
  3. 织梦php echo 调用金币,dedecms实现任意页面调用当前会员信息的方法
  4. PointNet++详解与代码
  5. 两组的数据平均值合并_不要进入数据陷进
  6. 西门子精智和精简面板区别_西门子S7-1200的功能与特点,应用范围介绍
  7. java 内部类私有成员 能访问,为什么外部Java类可以访问内部类私有成员?
  8. 石油计算机测控技术现场总线,中国石油北京《计算机测控技术》第二阶段在线作业...
  9. java双语试卷_Java程序设计基础(双语)试题题目及答案,课程2021最新期末考试题库,章节测验答案...
  10. Toad for Oracle 导入MIP.dmp文件时:报内存不足时的解决办法: