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