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. CodeForces - 557D Vitaly and Cycle(二分图)

    Vitaly and Cycle time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. P1552 派遣 左偏树

    左偏树就是一个应该用堆维护的区间,然后需要进行合并操作而发明的算法,其实这个算法没什么难的,和树剖有点像,维护几个数值,然后递归回来的时候就可以修改. 题干: 题目背景 在一个忍者的帮派里,一些忍者们 ...

  3. bzoj2142 礼物——扩展卢卡斯定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2142 前几天学了扩展卢卡斯定理,今天来磕模板! 这道题式子挺好推的(连我都自己推出来了) , ...

  4. KVO中你所不知道的"坑"

      一.什么是 KVO 首先让我们了解一下什么KVO,全称为Key-Value Observing,是iOS中的一种设计模式,用于检测对象的某些属性的实时变化情况并作出响应.键值观察Key-Value ...

  5. 使用centos 5.x 32位系统安装astgo 2014 v7.0教程(含全套安装文件)

    版本特色: 全自动安装 安装过程中不用频繁输入yes或回车 自带完整号码归属地数据库 自带触屏版WAP ·首先确定你需要使用astgo 2014 7.0还是7.3: astgo 2014 v 7.0 ...

  6. Android 数据库

    官方文档:https://developer.android.com/training/basics/data-storage/databases.html#WriteDbRow 原帖:http:// ...

  7. Java数组去重(利用数组,不借助集合)

    今天有个同学问我说老师,Java里边数组怎么去重,在不借助List集合的情况下,最后呢我整理了一下,打算发一篇博文,希望能帮助到有用的人,大佬绕过 public static void arrUniq ...

  8. 怎么在windows上安装 ansible How to install ansible to my python at Windows

    答案是不能再window上安装,答案如下: It's back! Take the 2018 Developer Survey today » Join Stack Overflow to learn ...

  9. Offer收割_5

    训练 投入 欲望.  ---贾森博尔特 第一题:二分枚举答案,check时候模拟一下即可. 时间复杂度: O(n*logn). 第二题: 描述 小Hi在虚拟世界中有一只小宠物小P.小P有K种属性,每种 ...

  10. java学习笔记_BeatBox(GUI部分)

    import java.awt.*; import javax.swing.*; public class BeatBox { JFrame theFrame; JPanel mainPanel; S ...