【发布时间】:2019-07-28 10:43:57
【问题描述】:
我能否以某种方式拥有仅因泛型类型约束而不同的重载方法?
这不会编译:
void Foo<T>(T bar) where T : class
{
}
void Foo<T>(T bar) where T : struct
{
}
由于这些是“开放”方法,因此当在代码中的其他地方使用具体类型的T 引用实际方法时,它应该是关闭/构造/完全定义的,然后就会清楚要调用哪个重载。
显而易见的解决方案是不要重载它们,但我想知道为什么这在 C# 中不起作用?
附加问题:如果这只是 C# 编译器约束,IL 是否允许这样的重载?
【问题讨论】:
-
这是一个很好的问题,希望@EricLippert 能回答。
-
@NikhilAgrawal:是的,我一直很喜欢 Jon Skeet 的回答,但这也是 Eric 的生计,所以当人们说“为什么不 C#允许吗?”
-
@Mike:很明确,因为 Eric 将作为 C# 编译器团队的主要开发人员提供内部观点。
-
@NikhilAgrawal:完全正确!