泛型转换

4

我能投射吗

IInterface<MyClass>

为了

IInterface<IAnother>

当MyClass实现IAnother接口时,会发生什么?

1
为什么需要这样做?你试图解决什么具体问题? - Bernard
1
可能是Covariance and contravariance real world example的重复问题。 - Daniel A. White
我不熟悉C#,但你可以用Java。应该只是像这样:(IInterface<IAnother>)myInstanceOfIInterfaceWithMyClass; - Patrick Perini
3个回答

4

是的,只有当您使用C# 4(或更高版本)并且将IInterface声明为IInterface<out T>时才能这样做。

这被称为通用协变性,您可以在MSDN上找到更多信息,或者阅读Bart de Smet的介绍(更正式但更易懂)。


1

C# 4 via Covariance 中是可能的,只要你正确地装饰你的使用场景(即:IInterface<out IAnother>)。

请注意,这样做可能会产生潜在的副作用,具体取决于您的接口使用情况。我建议阅读Variance in Generic Interfaces以获取更多详细信息,但主要问题是可能会出现运行时错误,因为您正在放弃一些类型安全性。


1

了解C# 4.0中的协变和逆变


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