什么是委托
可以认为委托是持有一个或多个方法的对象。当然,一般情况下你不会想要“执行”一个对
象,但委托与典型的对象不同。可以执行委托,这时委托会执行它所“持有"的方法。
本章将揭示创建和使用委托的语法和语义。在本章后面,你将看到如何使用委托将可执行的
代码从一个方法传递到另一个方法,以及为什么这样做是非常有用的。
我们将从下面的示例代码开始。如果此时你有些东西弄不明白,不必担心,本章后面会介绍
委托的细节。
- 代码开始部分声明了一个委托类型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