我在互联网和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”的分辨率,编译器看到的是“在DoStuff中使用T类型参数调用了InternalDoStuff”。
但我不知道这是否会有任何区别:
public class B : A <int>
{
}
public class Test
{
static void Main (string [] args)
{
B b = new B ();
b.DoStuff(100);
}
}
现在我能说编译器有足够的信息来决定"B是A的一个特定版本",因此调用InternalDoStuff的非泛型版本吗?
有没有一般原则来分析这种重载解析问题?