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

2021-10-22 23:29:46 字數 1537 閱讀 4971

visual studio 2005

其他版本

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

c#c++

f#jscript

複製

static

void

swap(ref

t lhs, ref

t rhs)

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

c#c++

f#jscript

複製

public

static

void

testswap()

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

c#c++

f#jscript

複製

swap(ref

a, ref

b);

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

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

c#c++

f#jscript

複製

class

sampleclass

}

如果定義的泛型方法接受與包含類相同的型別引數,編譯器將生成警告 cs0693,因為在方法範圍內,為內部 t 提供的引數將隱藏為外部 t 提供的引數。除了類初始化時提供的型別引數之外,如果需要靈活呼叫具有型別引數的泛型類方法,請考慮為方法的型別引數提供其他識別符號,如下面示例中的 genericlist2 所示。

c#c++

f#jscript

複製

class

genericlist

}class

genericlist2

}

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

c#c++

f#jscript

複製

void

swapifgreater(ref

t lhs, ref

t rhs) where

t : system.icomparable

}

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

c#c++

f#jscript

複製

void

dowork()

void

dowork()

void

dowork()

泛型(C 程式設計指南)

泛型是 2.0 版 c 語言和公共語言執行庫 clr 中的乙個新功能。泛型將型別引數的概念引入 net framework,型別引數使得設計如下類和方法成為可能 這些類和方法將乙個或多個型別的指定推遲到客戶端 宣告並例項化該類或方法的時候。例如,通過使用泛型型別引數 t,您可以編寫其他客戶端 能夠使...

泛型方法(C 程式設計)

泛型方法是使用型別引數宣告的方法,如下所示 c static void swap ref t lhs,ref t rhs 下面的 示例演示一種使用 int 作為型別引數的方法呼叫方式 c public static void testswap 也可以省略型別引數,編譯器將推斷出該引數。下面對 swa...

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...