我一直在 C# 编译器中摸索它的“继承的实例化泛型类”的限制。
无论如何,这是我的测试用例:
class Program
{
static void Main(string[] args)
{
var x = new InClass();
Console.WriteLine(x.Test(10)); //prints foo
Console.ReadLine();
}
}
class BaseClass<Foo, Bar>
{
public virtual Foo Test(Bar b)
{
return default(Foo);
}
public virtual string Test(int b)
{
return "foo"; ;
}
}
class InClass : BaseClass<string, int>
{
/*public override string Test(int b)
{
return "bar";
}*/
}
我认为 InClass 的这个声明会引发编译器错误,因为它会产生Test
歧义。这也使得非泛型Test
无法在InClass
. 请注意,我也注释掉了一些代码InClass
。如果我取消注释该代码,我会收到编译器错误。
在 C# 规范中是否完全提到了这种行为,或者这是闻所未闻的边缘情况?