【发布时间】:2020-01-24 07:23:45
【问题描述】:
C# 7.3 添加了support 用于将泛型类型参数约束为委托类型。
public class UsingDelegate<T> where T : System.Delegate { } public class Multicaster<T> where T : System.MulticastDelegate { }
这可能是微不足道的,但where T : System.Delegate 和where T : System.MulticastDelegate 之间有什么实际区别吗?这在 Microsoft Docs 中没有记录。
【问题讨论】:
-
我听到的故事是,它最初是一种优化存储的方法,通过不同类型的单次转换和多次转换。在实践中,只使用了多重演员,所以他们从不添加其他类型。现在拥有这两种类型没有意义,但由于历史原因它们存在。你的两个声明应该没有区别。
-
关于类型参数约束,
where T : System.Delegate就足够了。MulticastDelegate中的所有公共内容都是虚拟Delegate方法的覆盖(或遵循一个,如相等运算符的情况)。您需要对T执行的任何操作都将获得MulticastDelegate实现。即使是静态的Delegate.Combine和Delegate.Remove方法也遵循被MulticastDelegate覆盖的虚拟实现。
标签: c# .net generics delegates