2011-06-22 208 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中的協變性和逆變性