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

Posted sandaman2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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#学习之初步理解委托事件匿名方法和Lambda

C# 委托 —— 委托 泛型委托与Lambda表达式

委托与匿名委托

委托与Lambda表达式

part01.03 委托与 Lambda 表达式:Lambda 表达式

part01.03 委托与 Lambda 表达式:委托