我将把该功能称为委托推理。编译器能够推断出您分配到其中的委托的类型,查明目标对象是否具有采用您指定的名称的方法,并且验证该方法的签名匹配。然后,编译器创建所推断出的参数类型(包括正确的类型而不是一般类型参数)的新委托,并且将新委托分配到推断出的委托中。 像类、结构和方法一样,委托也可以定义一般类型参数: public class MyClass 在类的作用范围外部定义的委托可以使用一般类型参数。在该情况下,在声明和实例化委托时,必须为其提供类型实参: public delegate void GenericDelegate(T t); 另外,还可以在分配委托时使用委托推理: MyClass obj = new MyClass(); 当然,委托可以定义约束以伴随它的一般类型参数: public delegate void MyDelegate(T t) where T : IComparable; 委托级别约束只在使用端实施(在声明委托变量和实例化委托对象时),类似于在类型或方法的作用范围中实施的其他任何约束。 一般委托对于事件尤其有用。您可以精确地定义一组有限的一般委托(只按照它们需要的一般类型参数的数量进行区分),并且使用这些委托来满足所有事件处理需要。代码块 8 演示了一般委托和一般事件处理方法的用法。 代码块 8. 一般事件处理 public delegate void GenericEventHandler (S sender,A args); 代码块 8 使用名为 GenericEventHandler 的一般委托,它接受一般发送者类型和一般类型参数。显然,如果您需要更多的参数,则可以简单地添加更多的一般类型参数,但是我希望模仿按如下方式定义的 .NET EventHandler 来设计 GenericEventHandler: public void delegate EventHandler(object sender,EventArgs args); 与 EventHandler 不同,GenericEventHandler 是类型安全的(如代码块 8 所示),因为它只接受 MyPublisher 类型的对象(而不是纯粹的 Object)作为发送者。实际上,.NET 已经在 System 命名空间中定义了一般样式的 EventHandler: public void delegate EventHandler(object sender,A args) where A : EventArgs; |
正在阅读:C# 最强大的功能--泛型简介C# 最强大的功能--泛型简介
2005-06-23 10:16
出处:
责任编辑:moningfeng
键盘也能翻页,试试“← →”键