我以为我无法覆盖派生类的泛型方法。
http://my.safaribooksonline.com/book/programming/csharp/9780071741163/generics/ch18lev1sec13
此链接中的代码运行正常。尽管实例类型为
,但仍会调用overriden方法使用基类,而不是派生类型的实例。
现在我感到困惑,因为我以前的一个问题Type parameter declaration must be identifier not a type
是关于使用不起作用的基类型实例调用重写泛型方法!
答案 0 :(得分:0)
当声明方法时,您需要使用类型参数。当您调用方法时,您可以使用类型参数或类型,具体取决于您是否正在编程。
有效声明:
void DoSomething<T>(T input)
{
...
}
无效声明:
void DoSomething<int>(T input)
{
...
}
有效调用:
DoSomething<int>(input);
有效调用(如果S
是先前在此范围中定义的类型参数):
DoSomething<S>(input);
有效调用(因为类型参数T
可以从参数input
推断):
DoSomething(input);
答案 1 :(得分:0)
问题是对方法签名和声明的简单混淆。链接代码覆盖返回T的方法签名,没有返回T的参数,没有参数。这非常精细,因为方法签名是相同的。
链接的问题会尝试覆盖Document<T, U>
与Document<type1, type2>
的返回,由于通用括号中不允许使用类型,因此返回无效,但由于覆盖更改了方法,因此无效签名。