List轉型爲List

假設現在有兩個類—— A 和 B ,其中 A 是 B 的子類。將 A(子類)的引用轉換爲 B(父類)的引用是很普通的事,在任何編程語言中都不存在問題。但是將 List<A> (子類的容器)轉換成 List<B> (父類的容器)就不是那麼簡單的事情了,因爲 List<B> 並不是 List<A> 的父類。

不過從 .NET 4.0起,我們已經可以在 C# 中寫

List<Base> baseList = new List<Derived>(); 

這樣的代碼了。這是因爲 .NET 4.0 支持 C# 的變體範型(variance for generic type parameters)特性。關於其具體信息可以在網上搜索“C# 協變 逆變”。協變的英文是 Covariance,逆變的英文是 Contravariance。

如果想在 Unity 中使用這個特性的話,就要將 Unity 用的 .NET 運行時改爲4.0以上。方法是將 Project Setting -> Player -> Scripting Runtime Version 改成 Experimental (.NET 4.6 Equivalent)。

本文在我的獨立博客上的地址:http://zxtechart.com/2018/09/02/cast-list-a-to-list-b/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章