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

原文地址:https://www.cnblogs.com/sandaman2019/p/10420654.html

时间: 2024-08-01 13:42:11

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

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

如: DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += (o, e) => { dispatcherTimer_Tick(o, e, driverVM); }; dispatcherTimer.Interval = new TimeSpan(0, 0, 2); dispatcherTimer.Start(); 上述红色代码处,dispatcherTimer.Tick接受的委托为void

委托、Lambda表达式和事件

1.1 引用方法      委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用. Lambda 表达式与委托直接相关.当参数是委托类型时,就可以使用Lambda表达式实现委托引用的方法. 1.2委托      当要把 方法 传送给其他方法时,需要使用 委托.以下两个示例: 启动线程和任务--在C# 中,可以告诉计算机并行运行某些新的执行序列同时运行当前的任务.这种序列就是称为线程,在其中一个基类 System

C# 委托、Lambda表达式和事件——学习总结

1.概括 1.1.委托是寻址方法的.NET版本,类似C++中的指针.委托可以理解成指向函数的指针,它是类型安全的,定义了具体的参数和返回值. ——定义一个委托,实际上是定义一个类.委托是对方法的引用,如方法Func,把其功能交给委托的类来实现. ——委托的作用:结合泛型,可以实现功能上的扩展(如针对整型的函数,可以通过委托指向多种函数,实现类中某个属性的比较).Lambda表达式需要使用委托定义.事件需要使用到委托. 1.2.Lambda表达式与委托直接相关.Lambda表达式可以理解成一个简单

C++实现委托机制(三)——lambda表达式封装

C++实现委托机制(三)——lambda表达式封装1.引言:              其实原本没打算写这一章的,不过最后想了想,嗯还是把lambda表达式也一并封装进去,让这个委托也适应lambda表达式的注册.不过在之前还是需要先了解lambda表达式. 2.lambda表达式:              如果大家还有对lambda表达式不了解的可以先去了解lambda表达式的基本语法和用法.这里我们只讲跟lambda表达式封装相关的知识.我们先来看看使用lambda表达式的好处吧:1.la

Lambda表达式的语法格式

Lambda表达式的语法格式: 参数列表 => 语句或语句块 “Lambda表达式”是委托的实现方法,所以必须遵循以下规则: 1)“Lambda表达式”的参数数量必须和“委托”的参数数量相同: 2)如果“委托”的参数中包括有ref或out修饰符,则“Lambda表达式”的参数列中也必须包括有修饰符: 3)如果“委托”有返回类型,则“Lambda表达式”的“语句或语句块”中也必须返回相同类型的数据: 4)如果“委托”有几种数据类型格式而在“Lambda表达式”中“编译器”无法推断具体数据类型时,则

ASP.NET MVC学前篇之Lambda表达式、依赖倒置

前言 随着上篇文章的阅读,可能有的朋友会有疑问,比如(A.Method(xxx=>xx>yy);)类似于这样的函数调用语句,里面的xxx=>xx>yy这些到底是怎么用的? 依赖倒置原则的实现也会在本篇幅的最后来粗略的讲解一下. 本篇没有核心的主题,如果说要强制定义的话就是这些内容都是基础知识,是为了后续学习MVC框架做铺垫. 1 Lambda Lambda表达式在日常的开发中很常见,使用Lambda表达式可以自由的定义函数体并且精简代码量,那么Lambda表达式是什么呢? Lamb

Java8之——简洁优雅的Lambda表达式

Java8发布之后,Lambda表达式,Stream等等之类的字眼边慢慢出现在我们字眼.就像是Java7出现了之后,大家看到了“钻石语法”,看到了try-with-resource等等.面对这些新东西,如果它能为我们提供方便带来不一样的改变.那么就值得去尝尝鲜.Java8出现了之后,我就扫了一眼新东西.但是实际工作中普遍使用的是Jdk1.7,1,6.所以就一直“闲置”了.而今闲了就看看. Lambda表达式是怎样的? 下面将通过代码的形式来演示Lambda表达式,需要先安装JDK8.如果开发工具

Lambda表达式和Lambda表达式树

LINQ的基本功能就是创建操作管道,以及这些操作需要的任何状态. 为了富有效率的使用数据库和其他查询引擎,我们需要一种不同的方式表示管道中的各个操作.即把代码当作可在编程中进行检查的数据. Lambda表达式不仅可以用他们创建委托实例,而且C#编译器也能将他们转换成表达式树——用于表示Lambda表达式逻辑的一种数据结构.简言之——Lambda表达式用符号语言习惯的方法来表示LINQ数据管线中的操作. 作为委托的Lambda表达式 Lambda有特殊转换规则:表达式的类型本身并非委托类型,但它可

30天C#基础巩固----Lambda表达式

     这几天有点不在状态,每一次自己很想认真的学习,写点东西的时候都会被各种小事情耽误,执行力太差.所以自己反思了下最近的学习情况,对于基础的知识,可以从书中和视频中学习到,自己还是需要注意下关于自己以前做的项目中的一些知识点,那些才是HR提问的关键所在.今天都6.4号了,时间过的真是快呀,学校7.18左右放假,自己打算去西安看看,能不能找到一个实习工作,不行的话只能等到大四的第一学期去走校招.可以我们大四的第一学期还有很多课,真不知道老师是如何想的.所以在这还剩不到快2个月的时间里,把自己