我能否通过泛型约束来区分仅在泛型类型约束上有所不同的重载方法?
以下代码无法编译:
void Foo<T>(T bar) where T : class
{
}
void Foo<T>(T bar) where T : struct
{
}
由于这些是“开放”的方法,当在代码中使用具体类型T
引用时,实际方法应该被关闭/构造/完全定义,然后就可以清楚地调用哪个重载。
显而易见的解决方案是不要重载它们,但我想知道为什么这在C#中行不通?
附加问题:如果这只是C#编译器的限制,那么IL是否允许这样的重载?