2011-07-19 52 views
7

我目前正在閱讀C#中的協變和逆變。協方差/反變換適用於不實現通用接口的隱式可轉換類型嗎?

所有示例都具有可轉換對象的細節,並且因接口實現的準確性而有所不同,例如,

Circle : IShape

協方差:SomeType<Circle> as SomeType<IShape>
逆變:SomeType<IShape> as SomeType<Circle>


如果TypeATypeB各有寫入轉換爲其他類型的implicit converter,但沒有實現任何共同的接口在處理這些仿製藥的轉換時,談論協變性/逆變性仍然是正確的e類型?或者這是一個不同的概念?

回答

2

不同的概念。 out意義上的協變(或者通過in反轉)始終是保持參考的,完全沒有轉換 - 只是其他(可證明的)術語中的相同參考。這也是爲什麼它不適用於實現接口的結構,因爲框不參考保存。相同的參考保持邏輯適用於參考類型數組的協變分配。

+0

是否有這個概念的名稱?這是另一種類型的一般差異嗎? – StuperUser

1

這些類型不需要實現一個通用接口,以便共同/反對變體。

這些術語只是指轉換是否會導致信息丟失或信息可能增加。這與應用於繼承對象時相同,因爲它應用於雙精度和浮點數。

所以是的,只要有一個隱含的轉換器,在討論沒有通用接口的對象時談論共反變量仍然是正確的。

相關問題