2011-06-22 69 views
4

我可以投铸造泛型

IInterface<MyClass> 

IInterface<IAnother> 
时MyClass的实现IAnother

+1

为什么你需要这样做?你试图解决什么具体问题? – Bernard

+0

这个问题在 –

+1

之前被问过[Covariance and contravariance real world example]的可能重复(http://stackoverflow.com/questions/2662369/covariance-and-contravariance-real-world-example) –

回答

4

是的,但只有当您使用C#4(或更高版本)和IInterface时声明为IInterface<out T>

这被称为泛型协方差,你可以在Bart de Smet找到更多关于MSDN的信息,或者这个(更正式但更容易理解的)introduction

1

C# 4 via Covariance中这是可能的,前提是您正确装饰了您的使用场景(即:IInterface<out IAnother>)。

请注意,这样做有潜在的副作用,具体取决于您的接口使用情况。我建议您阅读Variance in Generic Interfaces了解更多细节,但主要问题是可能导致自己陷入可能导致运行时错误的情况,因为您放弃了某种类型的安全措施。

1

看看C#4.0中的协变性和逆变性