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 希望能和大家一起进步

lambda表达式与委托与线程初步谈论-基于刘铁锰视频观后操作的更多相关文章

  1. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  2. 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象

    本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...

  3. C#中通过Lambda表达式为委托传入更多的参数

    如: DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += (o, e) => { d ...

  4. 用lambda表达式声明委托

    首先来分享一段代码: Func<int, int, int> addMethod = (int x, int y) => (x + y); 熟悉的人肯定知道这句话是什么意思,可是不熟 ...

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

    1.1 引用方法      委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用.      Lambda 表达式 ...

  6. C# Note2:委托(delegate) & Lambda表达式 & 事件(event)

    前言 本文主要讲述委托和Lambda表达式的基础知识,以及如何通过Lambda表达式实现委托调用,并阐述.NET如何将委托用作实现事件的方式. 参考:C#高级编程 1.什么是委托(delegate)? ...

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

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

  8. C#高级编程(第9版) 第08章 委托、lambda表达式和事件 笔记

          本章代码分为以下几个主要的示例文件: 1. 简单委托 2. 冒泡排序 3. lambda表达式 4. 事件示例 5. 弱事件     引用方法 委托是寻址方法的.NET版本.在C++中函数 ...

  9. 委托与Lambda表达式

    ~,先不急说委托和Lambda表达式,先看两个例子再说: 1. 通过委托,为一个数字加10,如下代码: class Program { private delegate int JiSuan(int ...

随机推荐

  1. SPOJ - QMAX3VN (4350) splay

    SPOJ - QMAX3VN 一个动态的序列 ,在线询问某个区间的最大值.关于静态序列的区间最值问题,用ST表解决,参考POJ 3264 乍一看上去 splay可以轻松解决.书上说可以用块状链表解决, ...

  2. bzoj4561

    扫描线 想法挺妙 搞了很长很长时间... http://www.cppblog.com/superlong/archive/2010/08/06/122427.html #include<bit ...

  3. E20171006-hm

    trace  vt. 跟踪,追踪; 追溯,探索; 探索; 查找;          vi. 沿着一小径或道路前进; 可以追溯的;            n. 痕迹; 痕迹,踪迹; 微量,极少量; [植 ...

  4. 洛谷P1330 封锁阳光大学(二分图染色)

    P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...

  5. @RequestParam 和 @RequestBody 接受的时间格式

    这两个接受的时间格式不相同 首先看一下他们的区别 @RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容.(Ht ...

  6. go语言Notepad++简易开发环境搭建(windows)

    1.下载安装go语言:https://golang.org/dl/选择对应的平台,建议使用msi安装包,这个会帮你配置好环境变量(也许需要重启)对应的环境变量有: GOROOT - C:\Go\PAT ...

  7. C# 接口命名规范

    接口命名规范:1.大写约定PascalCasing:帕斯卡命名法,每个单词首字母大写应用场景:命名空间.类型.接口.方法.属性.事件.字段.枚举.枚举值eg:HtmlTag IOStream注意:两个 ...

  8. Hadoop基础(一)

    Hadoop 基础知识 大数据已经火了很长很长时间了,从最开始是个公司都说自己公司的数据量很大,我们在搞大数据.到现在大数据真的已经非常成熟并且已经在逐渐的影响我们的生产生活.你可能听过支付宝的金融大 ...

  9. B树、B+树、红黑树、AVL树比较

    B树是为了提高磁盘或外部存储设备查找效率而产生的一种多路平衡查找树. B+树为B树的变形结构,用于大多数数据库或文件系统的存储而设计. B树相对于红黑树的区别 在大规模数据存储的时候,红黑树往往出现由 ...

  10. Android 获取android安装apk框的安装状态(如点击取消、返回)

    最近鼓捣android,碰到个问题,因为没有root权限,需要调用Intent安装apk,但需要获取用户是否安装了(如,用户点击了返回或取消),查了很多文章,最后可以解决,但有瑕疵,解决方法如下: p ...