在C#中覆盖通用方法

3

2
你提供的问题和代码似乎是两种完全不同的技术。你提供的代码将T覆盖为T(这是可以的),但你提供的问题将T覆盖为特定的对象类型(这是不可以的)。我是否漏掉了你问题的某个部分? - tmesser
@YYY 谢谢,这里已经很晚了。我之前没有看到过这个,但它确实帮助我继续进行架构和理解。 - Pascal
没问题,我会快速写下我所说的内容作为答案。 - tmesser
2个回答

1
问题在于方法签名和声明的混淆。链接的代码正在覆盖一个返回T,没有参数的方法签名,这是完全可以的,因为方法签名是相同的。
链接的问题试图用Document<type1, type2>覆盖返回Document<T, U>的方法,这本身就是无效的,因为不允许在泛型括号中使用类型,而且还无效,因为覆盖改变了方法签名。

0

当你声明一个方法时,你需要使用一个类型参数。当你调用一个方法时,根据你是否以一般化编程的方式进行,你可以使用一个类型参数或一个类型。

有效的声明:

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

无效声明:

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

有效调用:

DoSomething<int>(input);

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

DoSomething<S>(input);

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

DoSomething(input);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接