以下總結了我對C#中差異的理解。我會很感激,如果你能告訴我我錯了什麼,因爲我讀了的文章Exact rules for variance validity作者:Eric Lippert,我無法理解它的大部分內容。類型差異
差異是這樣一種想法,即某種類型轉換(或投影,如Eric Lippert所說)類型轉換爲另一種類型可以保留賦值兼容性(協方差)或逆轉它(逆變),或者既不保留也不倒轉(不變)。 就是這樣;如果I是T中的協變變換,其中T是一組類型,那麼對於T中的任何T1和T2類型,如果T1可分配給T2,則I<T1>
可分配給I<T2>
。如果我是逆變的,結果將會恢復。如果我是不變的,那麼I<T1>
既不可分配到I<T2>
也不相反。
現在這對於一個類型是協變還是逆變意味着什麼?不是方差是類型投影的屬性,也不是類型本身的屬性。
這是什麼意思是一個泛型I<out T, in U>
T是協變和U逆變?另外,逆變有效性逆變異有效性的方向是什麼,協變有效性逆變異有效性均值的方向?
這是一個相當棘手的問題,在這裏的範圍似乎有點大。我會誠實地建議閱讀除埃裏克以外的更多文章,以瞭解co和逆變。 – Gjeltema 2013-04-26 00:25:57