我可以以某种方式重载方法,只有通用类型约束不同?
这不编译:
void Foo<T>(T bar) where T : class
{
}
void Foo<T>(T bar) where T : struct
{
}
Run Code Online (Sandbox Code Playgroud)
由于这些是"开放"方法,因此实际方法应该在具有类型的代码的其他地方引用时关闭/构造/完全定义T,然后将清楚调用哪个重载.
显而易见的解决方案不是让它们超载,但我想知道为什么这在C#中不起作用?
附加问题:如果这只是一个C#编译器约束,IL是否允许这样的重载?
Jon*_*eet 10
我可以以某种方式重载方法,只有通用类型约束不同?
不.就重载而言,它不是方法签名的一部分,就像返回类型不是.
在某些情况下,存在可怕的"伪重载"方式,但我不建议沿着这条路走下去.
有关更多信息,您可能需要阅读:
这是不可能的.
出于重载的目的,通用约束不被视为方法签名的一部分.
如果要同时允许值类型和引用类型,为什么要限制?
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |