1. 程式人生 > >你瞭解C#的協變和逆變嗎

你瞭解C#的協變和逆變嗎

> - 從C# 4.0開始,泛型介面和泛型委託都支援協變和逆變,由於歷史原因,陣列也支援協變。 > - 里氏替換原則:任何基類可以出現的地方,子類一定可以出現。 #### 協變(out) - `協變`:即自然的變化,遵循里氏替換原則,表現在程式碼上則是任何基類都可以被其子類賦值,如Animal = Dog、Animal = Cat - 使用`out`關鍵字宣告(注意和方法中修飾引數的out含義不同) - 被標記的引數型別只能作為方法的返回值(包括只讀屬性) - 在沒有協變時: ```csharp abstract class Animal {} class Dog : Animal {} class Cat : Animal {} interface I