2017-05-31 123 views
3

條件方法我已經現有的C#通用類和要添加或刪除基於所使用的類型的方法,我解釋通用類:基於類型

public class MyType<T> 
{ 
    public T getValue() { return value; } 
} 

對於特定MyType<void>,我想「刪除「getValue」方法。 這樣的事存在嗎?

+0

你的意思是說,對於特定的類型T,例如字符串,你想讓getValue不存在? –

+0

是的,例如。我需要這種方法爲int,float,bool,但不適用於void! – CDZ

+0

添加或刪除是什麼意思?如果你有一個泛型類或者沒有,你可以定義類方法並且這些方法可用,無關緊要,泛型基本上允許方法使用不同的類型 – john

回答

4

都能跟得上,但你也許可以做到與接口類似的東西

interface IMyType 
{ 
    //...what ever method/properties are shared for all 
} 

public class MyType<T> : IMyType 
{ 
    public T getValue() { return value; } 
    //...shared methods 
} 

public class MyTypeOtherSide : IMyType 
{ 
    //...shared methods 
} 

那麼你需要聲明變量IMyType和只使用MyType<T>當你知道,這是該類型的

0

的使用泛型的目的是爲所有類型使用泛型類型聲明,而不僅僅是少數類型聲明。

我想你只想要一個操作號碼。你可以在你的類中添加通用約束如下:

public class MyType<T> where T: struct 
{ 
    public T getValue() { return value; } 
} 

然而,這也將讓它們具有一般的參數void類型有GetValue - 方法,爲void也是struct。然而,這不會像Lee所提到的那樣構造MyType<void>類型。

此外沒有所有數值類型實現的通用接口,可用作通用約束。唯一的解決方法是每種類型都有一個方法,所以GetDouble,GetInt等等

+0

感謝您的所有意見,我也使用了這個技巧(來自Lee)來處理一切: https://stackoverflow.com/questions/15362424/method-with-same-name-and-signature-but-return-型在-C-尖銳 – CDZ