泛型方法(C 程式設計)

2021-07-15 17:56:28 字數 1218 閱讀 6071

泛型方法是使用型別引數宣告的方法,如下所示:

c#

static

void swap(ref t lhs, ref t rhs)

下面的**示例演示一種使用 int 作為型別引數的方法呼叫方式:

c#

public

static

void

testswap()

也可以省略型別引數,編譯器將推斷出該引數。下面對 swap 的呼叫等效於前面的呼叫:

c#

swap(ref a, ref b);
相同的型別推理規則也適用於靜態方法和例項方法。編譯器能夠根據傳入的方法實參推斷型別形參;它無法僅從約束或返回值推斷型別形參。因此,型別推理不適用於沒有引數的方法。型別推理在編譯時、編譯器嘗試解析過載方法簽名之前進行。編譯器向共享相同名稱的所有泛型方法應用型別推理邏輯。在過載解析步驟中,編譯器僅包括型別推理取得成功的那些泛型方法。

在泛型類中,非泛型方法可以訪問類級別型別引數,如下所示:

c#

class

sampleclass

>

}

如果定義採用相同型別引數作為包含類的泛型方法,編譯器將生成警告 cs0693,因為在方法範圍內為內部 t 提供的引數隱藏了為外部 t 提供的引數。如果需要使用其他型別引數(而不是例項化類時提供的型別引數)來靈活地呼叫泛型類方法,請考慮為方法的型別引數提供另乙個識別符號,如下面示例的 genericlist2 中所示。

c#

class

genericlist

>

}class

genericlist2

>

}

使用約束對方法中的型別引數啟用更專門的操作。此版本的 swap 現在名為 swapifgreater,它只能與實現 icomparable 的型別引數一起使用。

c#

void swapifgreater(ref t lhs, ref t rhs) where t : system.icomparable

}

泛型方法可以使用許多態別引數進行過載。例如,下列方法可以全部位於同乙個類中:

c#

void dowork() 

void dowork()

void dowork()

泛型方法(C 程式設計指南)

visual studio 2005 其他版本 泛型方法是使用型別引數宣告的方 法,如下所示 c c f jscript 複製 static void swap ref t lhs,ref t rhs 下面的 示例演示一種使用 int 作為型別引數的方法呼叫方式 c c f jscript 複製 p...

C 泛型型別 泛型方法

泛型會宣告型別引數 泛型的消費者需要提供型別引數來把佔位符型別填充 public class stack var stack newstack int stack.push 2 stack.push 3 int x stack.pop 2int y stack.pop 3stack open typ...

c 泛型程式設計

對於兩個不同的概念a和b,如果概念a所需求的所有功能也是概念b所需求的功能,那麼就說概念b是概念a的子概念。例如 標準模板庫 standard template library,簡稱stl 提供了一些非常常用的資料結構和演算法 將函式物件作為演算法的引數而不是將函式所執行的運算作為演算法的一部分。使...