C 泛型的使用

2021-08-16 18:28:24 字數 2351 閱讀 4710

泛型是用於處理演算法、資料結構的一種程式設計方法。泛型的目標是採用廣泛使用和可互動性的形式來表示演算法和資料結構,以使它們能夠直接用於軟體構造。泛型類、結構、介面、委託和方法可以根據它們儲存和操作的資料的型別來進行引數化。泛型能在編譯時提供強大的型別檢查,減少資料型別之間的顯式轉換、裝箱操作和執行時的型別檢查。泛型類和泛型方法同時具備可重用性、型別安全和效率高等特性,這是非泛型類和非泛型方法無法具備的。泛型通常在集合和在集合上執行的方法中。

泛型主要是提高了**的重用性。

泛型的型別引數 t 可以看做是乙個佔位符,它不是一種型別,它僅代表了某種可能的型別。型別引數t可以在使用時用任何型別來代替。

型別引數t的命名準則:使用描述性命名泛型型別引數,除非單個字母名稱完全可以讓人了解它表示的含義,而描述性名稱不會有更多的意義。

例1.

使用代表一定意義的單詞作為型別引數 t 的名稱。

public

inte***ce isessionchannelpublic

delegate toutput conbverter//將t作為描述性型別引數名的字首

例2.

使用 t作為型別引數名的字首

public

inte***ce isessionchannel

}

泛型介面的宣告形式人如下:

inte***ce 【介面名】

宣告泛型介面時,與宣告一般的介面唯一區別時增加了乙個。一般來說,宣告泛型介面與宣告非泛型介面遵循相同的規則。泛型型別宣告所實現的介面必須對所有可能的構造型別都保持唯一,否則就無法確定該為某些構造型別呼叫哪個方法。

說明:

在例項化泛型時也可以使用約束對型別引數的型別種類施加限制,約束是使用 where 上下文關鍵字指定的。

t:結構——型別引數必須是值型別。可以指定除 nullable 意外的任何值型別。

t:類——型別引數必須是引用型別。這一點也適用於任何類、介面、委託或陣列型別。

t:new()——型別引數必須具有無引數的公共建構函式。當與其他約束一起使用時,new()約束必須最後指定。

t:《基類名》——型別引數必須是指定的基類或派生自指定的基類。

t:《介面名稱》——型別引數必須是指定的介面或實現指定的介面。可以指定多個幾口約束。約束介面也可以是泛型。

t:u——為 t 提供的型別引數必須是為 u 提供的引數或派生自為 u 提供的引數。者成為裸型別約束。

例3.

建立乙個控制台應用程式,首先乙個 factory 類,在該類中建立乙個 createinstance 方法。然後再建立乙個泛型介面,在這個泛型介面中呼叫 createinstance 方法。根據型別引數 t ,獲取其型別。

//建立乙個泛型介面

public

inte***ce igennericinte***ce

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

//派生約束 where t:ti (t要整合自ti)

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

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

}calss program

}

泛型的宣告方式如下:

【修飾符】 void 【方法名】 《型別引數 t>

泛型方法是在宣告中包括了型別引數 t 的方法。泛型方法可以在類、結構或介面宣告中宣告,這些類、結構或介面本身可以是泛型或非泛型。如果在泛型型別宣告中宣告泛型方法,則方法可以同時引用該方法的型別引數 t 和包含該方法的宣告的型別引數 t。

說明:

泛型方法可以使用多型別引數進行過載。

例4.

建立乙個控制動態應用程式,通過定義乙個泛型方法來查詢陣列中某個數字的位置。

public calss finder   //建立乙個公共類finder  

}return -1; //如果不存在指定的數,則返回-1

}

}class

parogram

.6);

//輸出中數字在陣列中的位置

console.writeline("6在陣列中的位置:"+i.tostring());

console.readline();

}}

//程式執行結果是「6在陣列中的位置為5」

C 泛型 使用泛型List

一 泛型的優點 效能高。從前面的例子可以看出使用不需進行型別轉換,可以避免裝箱和拆箱操作,提高效能。型別安全。泛型集合對其儲存物件進行了型別約束,不是定義時宣告的型別,是無法儲存到泛型集合中的,保證了資料型別的安全。重用。使用泛型型別可以最大限度地重用 保護型別的安全以及提高效能。使用泛型 使用泛型...

C 泛型 使用泛型List

一 泛型的優點 效能高。從前面的例子可以看出使用不需進行型別轉換,可以避免裝箱和拆箱操作,提高效能。型別安全。泛型集合對其儲存物件進行了型別約束,不是定義時宣告的型別,是無法儲存到泛型集合中的,保證了資料型別的安全。重用。使用泛型型別可以最大限度地重用 保護型別的安全以及提高效能。使用泛型 使用泛型...

C 泛型使用

1.預定義 編譯器為vs2013 編譯環境為framework 4.0 專案型別為控制台應用程式 預定義實體類 class testclass set string value string.empty public string value set 2.泛型引數函式定義 public static...