我在 Internet 和 stackoverflow 上进行了一些基本搜索,当涉及通用版本方法和非通用版本方法时,我看到了很多关于重载解决方案的讨论。我知道重载解决是在编译时完成的 - 因此,如果我有这个代码:
public class A<T>
{
public void DoStuff(T value)
{
InternalDoStuff(value);
}
protected void InternalDoStuff(int value)
{
Console.WriteLine("Non-generic version");
}
protected void InternalDoStuff(T value)
{
Console.WriteLine("Generic version");
}
}
public class Test
{
static void Main (string [] args)
{
A<int> a = new A<int> ();
a.DoStuff(100);
}
}
输出将是“通用版本”,因为“InternalDoStuff”的分辨率已被编译器整理出来,编译器看到的是“InternalDoStuff 在 DoStuff 中使用 T 类型参数调用”。
但是我不知道这是否会有所作为:
public class B : A <int>
{
}
public class Test
{
static void Main (string [] args)
{
B b = new B ();
b.DoStuff(100);
}
}
现在我可以说编译器有足够的信息来确定“B 是 A 的特定版本”,因此调用 InternalDoStuff 的非通用版本吗?
是否有任何一般原则来分析这种重载决议?