![]() |
1
3
使用泛型时,继承的工作方式不同。正如Smashery所指出的,即使TypeA继承自TypeB,myType<A类>不继承myType<B类>。 因此,您不能调用定义为MethodA(myType<TypeB>b)的方法,期望得到myType>B类>并给它一个myType<A类>相反。所讨论的类型必须完全匹配。因此,以下内容无法编译:
因此,在您的情况下,您需要通过IRepo<ITypeEntity>即使它只包含DetailTypes。你需要在两者之间进行一些转换。如果您使用的是通用IList,则可以执行以下操作:
我希望这有帮助。 |
![]() |
2
3
好吧,这编译得很好。我基本上重新定义了类以接受泛型参数。这在你的背景下可能没问题。
|
![]() |
3
2
这个问题很难理解。DetailType可以继承自ITypeEntity,但实际上不是ITypeEntity。您对DetailType的实现可能会引入不同的功能,因此DetailType实现了ITypeEntity,但不等于ITypeEntity。我希望这是有道理的。.. |
![]() |
4
1
请看 @monoxide 的问题 和 as I said there ,查看Eric Lippert关于仿制药的方差和协方差的一系列帖子将使这一点更加清晰。 |
![]() |
5
1
您收到此编译错误是因为
这个
以下是MSDN文档中的术语(请参见 Generics in the .NET Framework )这可能会有所帮助:
|
![]() |
6
0
T是一个类型变量,在使用中会绑定到partular类型。该限制确保该类型将代表 子集 实现ITypeEntity的类型,不包括实现接口的其他类型。 |
![]() |
7
0
在编译时,即使您对其进行了约束,编译器也只知道MethodA中的T是一个引用类型。它不知道它被限制为什么类型。 |
![]() |
8
0
这是对泛型的冗余使用,如果T只能是ITypeEntity的实例,那么就不应该使用泛型。 泛型是当你有多个类型可以在某物内部时使用的。 |
![]() |
9
0
如果B是a的子类,这并不意味着
|
![]() |
10
0
在围绕泛型方法展开讨论的背景下,请允许我给你一个简单的泛型函数。它是VB的IIf(Immediate if)的通用等价物,而IIf本身是对C风格三元运算符(?)的拙劣模仿。它对任何事情都没有用,因为真正的三元运算符更好,但也许它会帮助你理解泛型函数是如何构建的,以及在什么上下文中应该应用它们。
|