2010-10-27 51 views
3

可能是我的問題是愚蠢的,但在這裏。協方差和反變量

協變和逆變只適用於c#中的代表嗎?

我們可以在正常的類層次結構中有協變和逆變嗎?

+0

[Covariance vs contravariance](http://izlooite.blogspot.com/2011/04/covariance-and-contravariance.html) – 2011-04-11 07:59:36

回答

8

協變和逆變只適用於代表在c#中嗎?

不完全;語言級差異也可以應用於接口,例如IEnumerable<out T> (同樣in也可以)。

我也應該注意,引用類型數組也是協變:

string[] orig = {"abc","def"}; 
object[] sameArray = orig; 

我們能有協變和逆變正常類層次?

否;它不適用於類/結構(儘管你當然可以實現一個協變接口,並強制接口)。

+0

糟糕;我想我點擊了錯誤的按鈕並刪除了Brian的評論,但他正確地指出數組也可以是協變的。 – 2010-10-27 10:55:01

+0

這是分配兼容性。協方差和賦值相容性之間存在差異。檢查這篇erric lippert文章。 http://blogs.msdn.com/b/ericlippert/archive/2009/11/30/what-s-the-difference-between-covariance-and-assignment-compatibility.aspx – Adeel 2010-10-27 11:00:04

+0

@Marc:謝謝你的回答,但你有什麼想法爲什麼這個限制是? – TalentTuner 2010-10-27 11:08:09