我以为我不能覆盖派生类的泛型方法。
http://my.safaribooksonline.com/book/programming/csharp/9780071741163/generics/ch18lev1sec13
此链接中的代码运行良好。尽管实例类型为
使用基类而不是派生类型的实例。
现在我很困惑,因为我以前的问题类型参数声明必须是标识符而不是类型
是关于使用不起作用的基类型实例调用覆盖泛型方法!
我以为我不能覆盖派生类的泛型方法。
http://my.safaribooksonline.com/book/programming/csharp/9780071741163/generics/ch18lev1sec13
此链接中的代码运行良好。尽管实例类型为
使用基类而不是派生类型的实例。
现在我很困惑,因为我以前的问题类型参数声明必须是标识符而不是类型
是关于使用不起作用的基类型实例调用覆盖泛型方法!
问题是对方法签名和声明的简单混淆。链接的代码覆盖了返回 T 的方法签名,没有返回 T 的参数,没有参数。这很好,因为方法签名是相同的。
链接的问题尝试覆盖Document<T, U>
with的返回Document<type1, type2>
,由于泛型括号中不允许使用类型,该返回本身无效,但也无效,因为覆盖更改了方法签名。
声明方法时,需要使用类型参数。当您调用一个方法时,您使用类型参数或类型,这取决于您是否在进行通用编程。
有效声明:
void DoSomething<T>(T input)
{
...
}
无效声明:
void DoSomething<int>(T input)
{
...
}
有效调用:
DoSomething<int>(input);
有效调用(如果S
是先前在此范围内定义的类型参数):
DoSomething<S>(input);
有效调用(因为T
可以从参数中推断出类型参数input
):
DoSomething(input);