協變與抗變
主要用於引用類型在泛型接口與委託中的轉換
舉例:
Animal
Cat:Animal
協變 Cat向上轉成Animal
out 關鍵字 用於返回類型 參考 Func<out T>
抗變 Animal轉成Cat
in 關鍵字 只能用於參數 參考 Action<in T>
像List<T> T不用同時用於參數類型又做爲返回類型
List<object> a;
List<string> b;
a= b;
b 不能賦組a 因爲 object與string是繼承關係 而 List<object> 與List<string> 無繼承關係
類型轉換的安全問題
Cat[]可轉成Animal[] 但Animal裏可也可以放Dog 所以從Animal到Cat不一定成功