私は、「継承されたインスタンス化されたジェネリッククラス」の制限で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#仕様にこの動作についての言及はありますか、それともこれは前代未聞のエッジケースですか?