輕鬆理解協變與逆變
在物件導向程式設計中,協變和逆變描述了基底類別和衍生類別之間的關係,它們決定了衍生類別如何被視為其基底類別,同時確保類型安全。
協變:
協變允許以「更大」(更不具體)的型別取代API中僅用作輸出(例如,傳回值)的原始型別。這意味著派生類別的列表可以被視為基底類別的列表。例如:
<code>List<水果> 水果列表 = new List<香蕉>(); // 协变</code>
逆變:
逆變允許以「更小」(更具體)的型別取代API中僅用作輸入(例如,方法參數)的原始型別。這意味著基底類別類型的參數可以作為衍生類別類型的參數傳遞。例如:
<code>基类 执行操作(派生类 变量); // 逆变</code>
輸入/輸出術語:
在泛型上下文中,「in」和「out」用來指示泛型類型是作為輸入參數還是傳回值使用。
介面和泛型的範例:
<code>// 输出 interface IMyInterface<out T> { T MyFunction(); } // 输入 interface IMyInterface<in T> { void MyFunction(T variable); }</code>
以上是程式設計中的協變和逆變:有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!