標籤:表達 lamda eric 參數傳遞 images ogr [] 直接 將不
1. 為什麼使用委託
由於三個方法中,只有一句代碼不同。可以考慮將三個方法簡化為一個,並將不同的部分作為參數傳入上述方法中。將一個方法作為參數傳遞給另一個方法,傳遞方法的類型,定義位委託類型。
2. 委託概念
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 委託概念{ class Program { //將一個方法作為另一個方法的參數時,前面的方法可使用委託 //委託的定義應與其所對應的函數的標籤一致 //函數標籤,指函數的傳回值和參數 public delegate void Dele(string name); static void Main(string[] args) { //1.1 初始化委託,並直接調用 //Dele dele = new Dele(SayHiChinese); //dele("喵"); //1.2 初始化委託 //Dele dele = SayHiChinese; //dele("喵"); //1.3 使用匿名函數初始化委託 //Dele dele = delegate(string name) //{ // Console.WriteLine("匿名 " + name); //}; //dele("喵"); //2. 委託作為另一個方法的參數 //Test("cat", SayHiChinese); //3. 用匿名函數初始化委託 //可避免聲明多個函數,用於當函數只使用一次時 //Test("dog", delegate(string name) //{ // Console.WriteLine("Anonymouse " + name); // Console.ReadKey(); //}); //4. lamda運算式( => goes to)和委託 Dele dele = (string name) => { Console.WriteLine("lamda運算式" + name); }; dele("cat"); } public static void Test(string name, Dele dele) { dele(name); } public static void SayHiChinese(string name) { Console.WriteLine("你好嗎? " + name); Console.ReadKey(); } public static void SayHiEnglish(string name) { Console.WriteLine("How are you?" + name); Console.ReadKey(); } }}
C# 委託