Ily*_*dik 6 .net c# generics generic-constraints
我遇到了一个重载方法的问题,这些方法具有看似独占的不同约束.这是我的例子:
public class A
{
public void Do<T>() where T : class
{
}
public void Do<T>() where T : struct
{
}
}
Run Code Online (Sandbox Code Playgroud)
并且这不会编译时出现以下错误"已定义相同签名的成员".是否有可能同时满足这两个条件,或者仅仅是C#编译器的限制?
这不是编译器的限制- 它是语言的限制(很可能也是CLR;我不确定).
从根本上说,这些都是冲突的重载 - 就像试图通过返回类型重载一样.它不受支持.
这是可能的声明等方法,这些调用所有编译成不同的方法调用:
a.Do<int>();
a.Do<string>();
a.Do<int?>();
Run Code Online (Sandbox Code Playgroud)
...但它总是涉及可选参数和/或参数数组,而且非常糟糕.
另外请注意,尽管你可以不被通用约束超载,您可以通过通用的"元数"(类型参数的数量)过载:
public void Foo() {}
public void Foo<T>() {}
public void Foo<T1, T2>() {}
Run Code Online (Sandbox Code Playgroud)