c 泛型介面

2021-06-22 01:27:46 字數 1372 閱讀 8012

使用泛型可以定義介面,在介面中定義的方法可以帶泛型引數。

public inte***ce  a  

t method (t  t);

1.協變和抗變

.net4通過協變和抗變為泛型介面和泛型委託新增了乙個重要的擴充套件。協變和抗變指對引數和返回值的型別進行轉換。在

.net

中,引數型別是協變的。假定有

shape

和rectangle

兩個雷,

rectangle

派生自shape

基類。宣告

display

()方法是接受

shape

型別的物件作為引數的,現在可以傳遞派生自

shape

基類的任意物件,例如將

rectangle

的物件作為引數,編譯器接受這個方法呼叫。

public void display(shape p) {}

rectangle r = new rectangle ;

display(r);

方法的返回型別是抗變的。當方法返回乙個shape

時,不能把它賦值給

rectangle

,因為是

shape

的一定是

shape

的反之不行。

2.泛型介面的協變

如果泛型型別用out

關鍵字標註,泛型介面就是協變的。這也一位置返回型別只能是t。

public inte***ce iindex

t this[int index] 

int count ;

3.泛型介面的抗變

如果泛型型別用in

關鍵字標註,泛型介面就是抗變的。這樣,介面只能把泛型型別

t用作其方法的輸入。

public inte***ce idisplay

void show (t item);

public class shapedisplay:display

public void show(shape s)

console.writeline();

public class shapedisplay:idisplay

public void show(shape s)

console.writeline(「 」,s.gettype().name.s.width,s.height);

static void main()

idisplayshapedisplay = new shapedisplay();

idisplayrectangledisplay = shapedisplay;

rectangledisplay.show(rectangles[0]);

泛型 泛型介面

泛型介面 介面上要宣告泛型,介面的抽象方法要接這個泛型。實現類的宣告也要寫具體的泛型實參。注意 泛型實參要用引用資料型別。基本資料型別不行。如果一定要使用基本資料型別那麼得使用基本資料型別的包裝類。如果實現類中的型別不確定,也想帶泛型,並且和介面中的一致。那麼在實現類中宣告,將在此處宣告的 類的泛型...

泛型及泛型介面

羊皮卷 學通c 的24堂課 7.5泛型及其使用 using system using system.collections.generic using system.linq using system.text namespace fxinte ce 實現上面泛型介面的泛型類 派生約束where t...

泛型討論 泛型介面

泛型也可以用於介面,例如生成器,這是一種專門負責創意物件的類。實際上是工廠方法設計模式的一種應用。不同的是它不需要任何引數。一般乙個生成器只定義乙個方法,該方法用於產生新的 物件。例子 public inte ce generator輔助類 public class coffee public cl...