3

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

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

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

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

现在我很困惑,因为我以前的问题类型参数声明必须是标识符而不是类型

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

4

2 回答 2

1

问题是对方法签名和声明的简单混淆。链接的代码覆盖了返回 T 的方法签名,没有返回 T 的参数,没有参数。这很好,因为方法签名是相同的。

链接的问题尝试覆盖Document<T, U>with的返回Document<type1, type2>,由于泛型括号中不允许使用类型,该返回本身无效,但也无效,因为覆盖更改了方法签名。

于 2012-08-28T22:01:27.977 回答
0

声明方法时,需要使用类型参数。当您调用一个方法时,您使用类型参数或类型,这取决于您是否在进行通用编程。

有效声明:

void DoSomething<T>(T input)
{
 ...
}

无效声明:

void DoSomething<int>(T input)
{
 ...
}

有效调用:

DoSomething<int>(input);

有效调用(如果S是先前在此范围内定义的类型参数):

DoSomething<S>(input);

有效调用(因为T可以从参数中推断出类型参数input):

DoSomething(input);
于 2012-08-28T21:36:30.020 回答