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. Xshell配色方案啊【学习笔记】

    自己移植从putty版本移植到Xshell的配色方案,效果不错,看上去挺舒服. [myisayme] text(bold)=eaeaea magenta(bold)=ff55ff text=fffff ...

  2. Scala快速统计文件中特定单词,字符的个数

    val fileContent=Source.fromFile("/home/soyo/桌面/ss5.txt").getLines.mkString(",") ...

  3. sessionStorage 的使用

    sessionStorage 的使用: sessionStorage.removeItem("data"); sessionStorage.getItem("data&q ...

  4. jQueryTools-Scrollable.js

    转载一篇例子,学习使用: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  5. 解决Oracle 本地可以连接,远程不能连接问题

    一.问题描述: 1.telnet 2.输入命令 lsnrctl status 远程访问不到的原因为:监听指向的是localhost,而不是你本机的远程访问ip地址,因此需要将监听的指向修改为你本机的远 ...

  6. easyui textbox 内容改变事件 增加oninpu 类似事件,

    //======================利用easyui验证功能,进行内容变化监控=== =============$(function () { var CustomerService = ...

  7. Google广告屏蔽插件adBlock

    今天在博客园写博客的时候发现莫名其妙的在右侧被植入了广告,询问了管理员得知存在以下几种可能: 1.电信网络供应商劫持网页,植入广告 2.ADSafe(是一款去除广告的软件,效果很不错) 但经过最终排除 ...

  8. MVC5+EasyUI+EF6+Linq通用权限系统出炉(1)

    1.先晒一下结构吧,

  9. Power Designer逆向操作(从mysql5.0生成数据库的物理模型)

    Power Designer逆向操作(从mysql5.0生成数据库的物理模型) 环境:powderdesigner12.5:mysql5.0 步骤: 1.  为指定的数据库配置MySQL的ODBC数据 ...

  10. js获取图片信息(二)-----js获取img的height、width宽高值为0

    首先,创建一个图片对象: var oImg= new Image(); oImg.src = "apple.jpg"; 然后我们打印一下图片的信息: console.log(oIm ...