使用泛型可以定義介面,在介面中定義的方法可以帶泛型引數。
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...