關於C 泛型介面協變和抗變的一些理解

2021-07-23 12:50:12 字數 352 閱讀 7446

一、協變

支援協變的泛型引數用out標註,形式是,簡單的說就是t型別在使用中只能作為返回型別出現在方法名的左邊,於是他可以被自己的派生類賦值。

二、抗變

支援抗變的泛型引數用in標註,形式是,簡單的說如t型別在使用中只能作為引數型別出現在括號的裡面,因此他可以給自己的基類賦值。

例子如下:

class class1:itest

public void getresult2(string a)

public object getresult3()

}public inte***ce itest

C 泛型 協變和抗變

例如,可以給乙個需要 shape 引數的方法傳送 rectangle 引數嗎?下面用示例說明這些擴充套件的優點。在.net中,引數型別是協變的。假定有 shape 和 rectangle 類,rectangle派生自 shape基類。宣告 display 方法是為了接受 shape 型別的物件作為其...

C 學習 6 泛型介面中的協變和抗變

1.變體的由來 眾所周知,多型性允許把派生類的物件放在基類的變數中,例如 cow mycow newcow 犛牛 animal myanimal mycow 之所以cow的型別放在aniaml型別的變數中可行,是因為cow派生自animal。但是,在介面中,這種情況是不適用的,會報錯。例如下面的 i...

C 泛型的協變和逆變

可變性是以一種型別安全的方式,將乙個物件當做另乙個物件來使用。如果不能將乙個型別替換為另乙個型別,那麼這個型別就稱之為 不變數。協變和逆變是兩個相互對立的概念 在c 4.0之前,所有的泛型型別都是不變數 即不支援將乙個泛型型別替換為另乙個泛型型別,即使它們之間擁有繼承關係,簡而言之,在c 4.0之前...