C#雜記 — 泛型修飾詞共變數(covariance)與反變數(contravariance) out 與 in

莊創偉
1 min readFeb 21, 2020

--

共變數( covariance )與反變數( contravariance )在委派中經常會出現,看中文很難懂、看英文也很難懂。
但是修飾詞 out in 就親切多了。所以以下都用out跟in來代稱

incontravariance 允許默認轉換為延伸類別(子類別)。
outcovariance 允許默認轉換為基底類別(父類別)
詳細可看MSDN
out
in
共變數和反變數

共變數 out (contravariance)允許參數轉換為基底型別
反變數 in (contravariance)允許參數轉換為延伸型別

而委派 Func 的簽章為

public delegate TResult Func<in T, out TResult>(T arg);

也就是允許入參傳入延伸類別,回傳轉型為基底類別。

--

--

莊創偉

學海無涯。但是為了生計還是得下海的風塵男子