共變數( covariance )與反變數( contravariance )在委派中經常會出現,看中文很難懂、看英文也很難懂。
但是修飾詞 out 跟 in 就親切多了。所以以下都用out跟in來代稱
in:contravariance 允許默認轉換為延伸類別(子類別)。
out: covariance 允許默認轉換為基底類別(父類別)。
詳細可看MSDN
●out
●in
●共變數和反變數
而委派 Func 的簽章為
public delegate TResult Func<in T, out TResult>(T arg);
也就是允許入參傳入延伸類別,回傳轉型為基底類別。