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);

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

--

--

莊創偉

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