C# 2.0用委托推断扩展了委托的语法。只要需要委托实例,就可以只传送地址的名称。前面的示例用GetAString委托的一个新实例初始化了GetAString类型的变量firstStringMethod:
GetAString firstStringMethod = new GetAString(x.ToString);
只要用变量x把方法名传送给变量firstStringMethod,就可以编写出作用相同的代码:
GetAString firstStringMethod = x.ToString;
C#编译器创建的代码是一样的。编译器会用firstStringMethod检测需要的委托类型,因此创建GetAString委托类型的一个实例,用对象x把方法的地址传送给构造函数。
注意:
不能调用x.ToString()方法,把它传送给委托变量。调用x.ToString()方法会返回一个不能赋予委托变量的字符串对象。只能把方法的地址赋予委托变量。
委托推断可以在需要委托实例的任何地方使用。委托推断也可以用于事件,因为事件基于委托(参见本章后面的内容)。