覆盖c#中的泛型方法

时间:2012-08-28 21:29:17

标签: c# generics

我以为我无法覆盖派生类的泛型方法。

http://my.safaribooksonline.com/book/programming/csharp/9780071741163/generics/ch18lev1sec13

此链接中的代码运行正常。尽管实例类型为

,但仍会调用overriden方法

使用基类,而不是派生类型的实例。

现在我感到困惑,因为我以前的一个问题Type parameter declaration must be identifier not a type

是关于使用不起作用的基类型实例调用重写泛型方法!

2 个答案:

答案 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>的返回,由于通用括号中不允许使用类型,因此返回无效,但由于覆盖更改了方法,因此无效签名。