是否有可能在C#中創建泛型方法併爲給定類型添加一個具體實現? 例如:C#泛型與具體實現
void Foo<T>(T value) {
//add generic implementation
}
void Foo<int>(int value) {
//add implementation specific to int type
}
是否有可能在C#中創建泛型方法併爲給定類型添加一個具體實現? 例如:C#泛型與具體實現
void Foo<T>(T value) {
//add generic implementation
}
void Foo<int>(int value) {
//add implementation specific to int type
}
一般而言,您將無法做到這一點。相反,你只需要實現一個非泛型重載,因爲編譯器會更喜歡將它用於泛型版本。編譯時類型用於分派對象:
void Foo<T>(T value)
{
}
void Foo(int value)
{
// Will get preferred by the compiler when doing Foo(42)
}
然而,在一般情況下,這並不總是工作。如果你混合使用繼承或類似的方式,你可能會得到意想不到的結果。舉例來說,如果你有一個Bar
類實現IBar
:
void Foo<T>(T value) {}
void Foo(Bar value) {}
你通過把它稱爲:
IBar b = new Bar();
Foo(b); // Calls Foo<T>, since the type is IBar, not Bar
您可以解決此通過動態調度:
public void Foo(dynamic value)
{
// Dynamically dispatches to the right overload
FooImpl(value);
}
private void FooImpl<T>(T value)
{
}
private void FooImpl(Bar value)
{
}
謝謝你的明確解釋。 –
好的答案,裏德。 –
我我放棄了我的答案,我也投了票,因爲目前還不清楚你在問什麼。這似乎是[XY問題](http://xyproblem.info/)。 –