我能否以某种方式拥有仅因泛型类型约束而不同的重载方法?
这不编译:
void Foo<T>(T bar) where T : class
{
}
void Foo<T>(T bar) where T : struct
{
}
由于这些是“开放”方法,当在代码中使用具体类型的 T
引用实际方法时,实际方法应该是封闭的/构造的/完全定义的,然后就会清楚是哪个过载调用。
显而易见的解决方案是不要重载它们,但我想知道为什么这在 C# 中不起作用?
附加问题:如果这只是一个 C# 编译器约束,IL 是否允许这样的重载?
最佳答案
Can I somehow have overloaded methods which differ only by generic type constraints?
没有。就重载而言,它不是方法签名的一部分,就像返回类型不是一样。
有horrible在某些情况下“伪重载”的方式,但我不建议走这条路。
更多信息,您可能想阅读:
关于c# - 基于泛型约束的方法重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12529966/