什么是委托
可以認為委托是持有一個或多個方法的對象。當然,一般情況下你不會想要“執行”一個對
象,但委托與典型的對象不同。可以執行委托,這時委托會執行它所“持有"的方法。
本章將揭示創建和使用委托的語法和語義。在本章后面,你將看到如何使用委托將可執行的
代碼從一個方法傳遞到另一個方法,以及為什么這樣做是非常有用的。
我們將從下面的示例代碼開始。如果此時你有些東西弄不明白,不必擔心,本章后面會介紹
委托的細節。
- 代碼開始部分聲明了一個委托類型MyDel(沒錯,是委托類型不是委托對象。我們很快就
會介紹這一點)。 - Program類聲明了3個方法:PrintLow、PrintHigh和Main。接下來要創建的委托對象將
持有printLow或PrintHigh方法,但到底使用哪個要到運行時才能確定。 - Main聲明了一個局部變量del,它將持有一個MyDel類型的委托對象的引用。這并不會創
建對象,只是創建持有委托對象引用的變量,在幾行之后便會創建這個委托對象,并將
其賦值給這個變量。 - Main創建了一個Random類的對象,Random是一個隨機數生成器類。接著程序調用該對象
的Next方法,將99作為方法的輸入參數。這會返回一個介于0到99之間的隨機整數,
并將這個值保存在局部變量randomvalue中。 - 下面一行檢查返回并存儲的隨機值是否小于50。(注意,我們使用三元條件運算符來返回
兩個委托之一。)- 如果該值小于50,就創建一個MyDel委托對象并初始化,讓它持有PrintLow方法的引用。
- 否則,就創建一個持有PrintHigh方法的引用的MyDel委托對象。
- 最后,Main執行委托對象del,這將執行它持有的方法(或P1intHight)。
說明 如果你有C++背景,理解委托最快的方法是把它看成一個類型安全的、面向對象的C++
函數指針。
delegate void MyDel(int value); //聲明委托類型class Program
{void PrintLow(int value){Console.WriteLine($"{value}-Low Value");}void PrintHigh(int value){Console.WriteLine($"{value} - High Value");}static void Main(){Program program=new Program();MyDel del; //聲明委托變量//創建隨機整數生產器對象,并得到0到99之間的一個隨機數Random rand=new Random();int randomValue=rand.Next(99);//創建一個包含PrintLow或PrintHigh的委托對象并將其賦值給del變量del=randomValue<50?new MyDel(program.PrintLow):new MyDel(program.PrintHigh);del(randomValue);//執行委托}
}
由于我們使用了隨機數生成器,程序在不同的運行過程中會產生不同的值。程序運行可能產
生的結果如下:
28 -Low Value