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. shell curl 实现rest 并发测试

    for i in {1..50}; do curl http://10.43.95.26:5812/rdk/service/app/example/server/my_service & do ...

  2. B1877 [SDOI2009]晨跑 费用流

    其实之前写过一个板子,但是一点印象都没有,所以今天重写了一下,顺便把这个题当成板子就行了. 其实费用流就是把bfs换成spfa,但是中间有一个原则,就是费用优先,在费用(就是c)上跑spfa,顺便求出 ...

  3. Java 集合列表排序

    主要是实现Comparator接口 数组排序: //按最后更新时间降序排列,时间相同的按照文件名生序排列 Arrays.sort(files, new Comparator<File>() ...

  4. localStorage 读&&写

    localStorage.setItem('edit',nowedit);  写 var nowedit1= localStorage.getItem('editdel');读

  5. PCB genesis孔符制作实现方法

    一.先看genesis原始孔符 孔符的作用:用于表示孔径的大小的一种代号, 当孔径检测时,可以按分孔图中的孔符对应的孔径尺寸对孔径检测. 在实际PCB行业通常不使用原始(图形)孔符,而使用字母孔符(如 ...

  6. TypeScript `unknown` 类型

    unknown 字面理解和 any 其实没差,任何类型都可赋值给它,但有一点, Anything is assignable to unknown, but unknown isn't assigna ...

  7. HDU 1754 Java

    退役后学java... 裸线段树 //By SiriusRen import java.util.*; import java.math.*; public class Main{ public st ...

  8. BZOJ 3473

    思路: CF原题 ZYF有题解 O(nlog^2n) //By SiriusRen #include <bits/stdc++.h> using namespace std; ; ]; i ...

  9. 【转】Linux下使用locale命令设置语言环境

    转自:http://www.cnblogs.com/dolphi/p/3622570.html locale命令设置语言环境 在Linux中通过locale来设置程序运行的不同语言环境,locale由 ...

  10. Laravel 5.4.36 session 生效问题

    在测试过程中发现 如果方法有echo 等函数输出到PHP的输出缓存中 存在  sessionID 不会放到http的请求头中  下次请求也就拿不到sessionid问题 问题的原因 代码位置:publ ...