lambda表达式与委托与线程初步谈论-基于刘铁锰视频观后操作
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表达式与委托与线程初步谈论-基于刘铁锰视频观后操作的更多相关文章
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象
本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...
- C#中通过Lambda表达式为委托传入更多的参数
如: DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += (o, e) => { d ...
- 用lambda表达式声明委托
首先来分享一段代码: Func<int, int, int> addMethod = (int x, int y) => (x + y); 熟悉的人肯定知道这句话是什么意思,可是不熟 ...
- 委托、Lambda表达式和事件
1.1 引用方法 委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用. Lambda 表达式 ...
- C# Note2:委托(delegate) & Lambda表达式 & 事件(event)
前言 本文主要讲述委托和Lambda表达式的基础知识,以及如何通过Lambda表达式实现委托调用,并阐述.NET如何将委托用作实现事件的方式. 参考:C#高级编程 1.什么是委托(delegate)? ...
- java8学习之Lambda表达式深入与流初步
Lambda表达式深入: 在上一次[http://www.cnblogs.com/webor2006/p/8135873.html]中介绍Lambda表达式的作用时,其中说到这点: 如标红处所说,既然 ...
- C#高级编程(第9版) 第08章 委托、lambda表达式和事件 笔记
本章代码分为以下几个主要的示例文件: 1. 简单委托 2. 冒泡排序 3. lambda表达式 4. 事件示例 5. 弱事件 引用方法 委托是寻址方法的.NET版本.在C++中函数 ...
- 委托与Lambda表达式
~,先不急说委托和Lambda表达式,先看两个例子再说: 1. 通过委托,为一个数字加10,如下代码: class Program { private delegate int JiSuan(int ...
随机推荐
- Akka源码分析-local-DeathWatch
生命周期监控,也就是死亡监控,是akka编程中常用的机制.比如我们有了某个actor的ActorRef之后,希望在该actor死亡之后收到响应的消息,此时我们就可以使用watch函数达到这一目的. c ...
- pip使用豆瓣镜像源
pip使用豆瓣的镜像源 豆瓣镜像地址: https://pypi.douban.com/simple/ 虽然用easy_install和pip来安装第三方库很方便 他们的原理其实就是从Python的官 ...
- Elasticsearch之CURL命令的GET
这是个查询命令. 前期博客 Elasticsearch之CURL命令的PUT和POST对比 1. 以上是根据员工id查询. 即在任意的查询字符串中添加pretty参数,es可以得到易于我们识别的jso ...
- Android 检查手机上是否安装了指定的软件(根据包名检测)
Android检查手机上是否安装了指定的软件(根据包名检测) /** * 检查手机上是否安装了指定的软件 * @param context * @param packageName * @return ...
- php入门学习笔记
学习笔记[6.5-6.13] 1.常用命令 打开数据库格式: mysql -h主机地址 -u用户名 -p 重启nginx:sudo /etc/init.d/nginx restart或者service ...
- python 将中文转拼音后填充到url做参数并写入excel
闲着没事写了个小工具,将中文转拼音后填充到url做参数并写如excel 一.先看下演示,是个什么东西 二.代码 代码用到一个中文转拼音的库,库是网上下的,稍微做了下修改,已经找不原来下载的地址了,然后 ...
- (转) Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
http://blog.csdn.net/u010648555/article/details/60767633 当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的 ...
- post发送数据 mypost input 改变事件
//name=或者 "&name=" + "123" + "&data=" + "slice" (可以获 ...
- vi 命令学习(一)
行内移动] w word 向后移动一个单词 b back ·向前移动一个单词 行首 ^ 行首,第一个不是空白字符的位置 $ 行尾 [行数移动] gg go 文件顶部 G go 文件末尾 数字gg go ...
- DECLARE_DYNAMIC
DECLARE_DYNAMIC(class_name) DECLARE_DYNCREATE 包含了DECLARE_DYNAMIC的功能,并且可以在运行过程中动态创建对象.如果需要动态创建类对象,需要使 ...