C 泛型方法

2021-09-08 18:49:12 字數 1132 閱讀 4160

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

static

void swap(ref t lhs, ref

t rhs)

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

public

static

void

testswap()

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

swap(ref a, ref b);

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

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

class sampleclass

}

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

class genericlist

}class genericlist2

}

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

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

}

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

void

dowork()

void dowork()

void dowork()

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 泛型方法

using system using system.collections.generic using system.text namespace generic 呼叫泛型方法。注意 在呼叫泛型方法時,對泛型方法的型別引數例項化 public int usemethod 過載getvalue方法 p...

泛型 泛型類 泛型方法 泛型擦除

1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...