2016-06-21 74 views
2

是否有可能在C#中創建泛型方法併爲給定類型添加一個具體實現? 例如:C#泛型與具體實現

void Foo<T>(T value) { 
    //add generic implementation 
} 
void Foo<int>(int value) { 
    //add implementation specific to int type 
} 
+0

我我放棄了我的答案,我也投了票,因爲目前還不清楚你在問什麼。這似乎是[XY問題](http://xyproblem.info/)。 –

回答

5

一般而言,您將無法做到這一點。相反,你只需要實現一個非泛型重載,因爲編譯器會更喜歡將它用於泛型版本。編譯時類型用於分派對象:

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) 
{ 
} 
+0

謝謝你的明確解釋。 –

+0

好的答案,裏德。 –