泛型及泛型介面

2021-06-09 05:31:41 字數 1666 閱讀 1363

羊皮卷《學通c#的24堂課》7.5泛型及其使用

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace fxinte***ce

//實現上面泛型介面的泛型類

//派生約束where t : ti(t要繼承自ti)

//建構函式約束where t : new()(t可以例項化)

public class factory: igenericinte***cewhere t : ti, new()

}class program}}

1.<>的作用就是表示裡邊是引數?

2.介面中呼叫createinstance方法是否指類中的建構函式

3.    public class factory: igenericinte***cewhere t : ti, new()

t代表的是當前類factory的型別,ti表示父類的型別?wheret:ti表示t繼承自ti,t:ti,new()是t:ti,t,new()的縮寫?要是沒有new(),factory類就不能例項化?

msdn幫助文件,關於where的問題

****************************************====

c# where子句

where 子句用於指定型別約束,這些約束可以作為泛型宣告中定義的型別引數的變數。

1.介面約束。

例如,可以宣告乙個泛型類 mygenericclass

,這樣,型別引數 t

就可以實現 icomparable介面:

public class mygenericclasswhere t:icomparable

2.基類約束:指出某個型別必須將指定的類作為基類(或者就是該類本身),才能用作該泛型型別的型別引數。

這樣的約束一經使用,就必須出現在該型別引數的所有其他約束之前。

class myclassy

where t :

class

where u :

struct

3.where 子句還可以包括建構函式約束。

可以使用 new 運算子建立型別引數的例項;但型別引數為此必須受建構函式約束 new() 的約束。new() 約束可以讓編譯器知道:提供的任何型別引數都必須具有可訪問的無引數(或缺省)建構函式。例如:

public class mygenericclass where t: icomparable, new

() new() 約束出現在 where 子句的最後。

4.對於多個型別引數,每個型別引數都使用乙個 where 子句,

例如:inte***ce

myi

class dictionary

where tkey: icomparable, ienumerable

where tval: myi}

5.還可以將約束附加到泛型方法的型別引數,例如:

public bool mymethod

(t t) where t : imyinte***ce

請注意,對於委託和方法兩者來說,描述型別引數約束的語法是一樣的:

delegate t mydelegate() where t : new()

泛型 泛型介面

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

泛型 (2)泛型類 泛型方法 泛型介面

一 泛型類 定義person類 package cn.itcast.p2.bean public class person implements comparable public person string name,int age public int compareto person p ov...

泛型類,泛型方法,泛型介面

泛型,就是一種不確定的資料型別。如果在類後面加上 這個類就變成了泛型類。這個 t可以使用任意的字母代替。表示定義了一種不確定的資料型別,這種不確定的資料型別必須在使用這個類 比如建立物件 的時候才能確定下來。如果希望縮小泛型的範圍,延後泛型的確定時間,讓泛型在呼叫方法的時候確定,那麼我們可以使用泛型...