程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 2.0泛型類的創建和使用(3)

C# 2.0泛型類的創建和使用(3)

編輯:關於C語言

六、定義泛型方法

接下來,我們為所需要的參數化類型定義其它 一些特性。這包括屬性,方法,和事件。在我們的實例中,在Customer出現的每 一處,我們都用參數T替換它。完成後的泛型列表類顯示於列表4中。

列 表4 一個基於System.Collections.CollectionBase的輕量級的參數化泛型列表 類。

using System;
using System.Collections;
using System.Text;
namespace Generics{
 public class List<T> : CollectionBase {
  public List(){ }
   public T this[int index] {
   get { return (T)List[index]; }
   set { List[index] = value; }
  }
  public int Add(T value) {
   return List.Add(value);
  }
 }
}

為了測試該定制列表,注釋掉使用 System.Collections.Generic命名空間一句並且把列表4中的List<T>使用 在列表1的代碼中;它將以同樣的方式工作。

全面地修改.Net的 List<T>是不必要的而且它也包含遠比我們的示例多得多的特性;但是列 表4顯示出這種機制對於定義定制泛型類是多麼容易。

七、增加類型約束

最後要討論的是約束問題。約束被應用於類或其它特性上並且使用下面 的語法:

Where T : constraint_type

例如,任何 我們想要通過using語句所使用的,如一個SqlDataReader,必須實現 Idisposable接口。這是因為如下方式使用的using語句:

using (Form f = new Form()){...}

就象一個try..finally塊一樣工作 -總是清除新創建的資源。其工作原理很簡單,只需要CLR針對在該using語句中 創建的對象發出一個到IDisposable.Dispose的調用即可。例如,在上面這一句 中,一個新的表單被創建,並且在using語句退出之前即調用Form.Dispose。

要對一個泛型類施加以確保該類實現了接口IDisposable,我們將添加先 行詞where T:Idisposable。在列表4中的泛型列表上施加約束後,我們將重新修 改列表4如下面的列表5所示。

列表5 增加一個約束到泛型類以確保我們 的List<T>中的所有的值T實現接口Idisposable。

using System;
using System.Collections;
using System.Text;
namespace Generics{
 public class List<T> : CollectionBase where t : IDisposable{
  public List(){ }
  public T this[int index]{
   get { return (T)List[index]; }
   set { List[index] = value; }
  }
  public int Add(T value){return List.Add(value);}
 }
}

先行詞where的值可以是類,接口,結構,實現一個無參的公共 構造器或有一個特定的基類的類。詳見有關幫助文檔。

八、總結

泛型的設計是用來減少你重復實現的代碼的次數-只需改變數據類型即可。因為 抽象數據結構,如隊列,棧和列表皆是典型的數據結構,所以存在針對這些東西 的泛型類完全可以理解。你可以從.Net中派生大量的值-通過使用現有的泛型類 ,如在System.Collections.Generic命名空間中的那些。

可以肯定,在 一段相當長的時間裡,泛型將會象模式和重構等革新一樣對開發帶來越來越大的 價值,而且新的數據結構能被轉換成可重用的如泛型等的代碼元素。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved