2014-01-16 182 views
0

得到我有我的班級內部的三個枚舉可以枚舉類型的接口

public enum CPUBrandEnum { 
    Intel = 1, 
    AMD = 2      
} 

public enum CPUTypeIntel { 
    Celeron, 
    Pentium4 
} 
public enum CPUTypeAMD { 
    ASeries, 
    ESeries 
} 

,所以我必須持有CPU品牌

public CPUBrandEnum CPUBrand { get; set; } 
public SelectedCPUType ??? 

但因爲我不屬性不知道在運行時用戶會選擇哪種cpu類型我不知道如何構建將保持選擇cpu的屬性類型。

如果這些是對象,我會從一些接口ICPUType派生它們,但在這種情況下(枚舉)我卡住了。

更新: 讓我來解釋這個屬性SelectedType的用法。

用戶將從CPUBrandEnum中選擇CPU品牌類型,根據該值我將顯示CPUTypeAMD的CPUTypeIntel。

因此根據該值,SelectedCPUType可以是來自CPUTypeXXX enum的一個選定值。

+0

您不能從接口派生,您可以實現它。 –

+0

你是如何實際使用'SelectedCPUType'的?答案將決定是否有更好的方法來實現您的要求。 –

回答

10

不,枚舉不能在.NET中實現接口。他們真的只是有名的數字。

即使他們可以實現接口,你會最終對壞數據的可能性(例如「英特爾A系列」。

目前尚不清楚是否仍要使用這些值做什麼,但它可能是你應該有一個枚舉所有的有效的可能性,這可能不適合您真正情況下工作的,當然。

1

enum無法實現一個接口。

如果你找誰g來標記枚舉值的缺失,那麼你有兩個選項。一個是有一個名爲Unknown(或類似的東西)的枚舉成員。例如:

public enum CPUBrandEnum { 
    Unknown = 0, 
    Intel = 1, 
    AMD = 2      
} 

另一種方法是使用一個可爲空值:

public CPUBrandEnum? CPUBrand { get; set; } 
1

我將具有類型CPUTypeIntel的兩個屬性,和CPUTypeAMD,以及每個枚舉具有無的默認值,例如public enum CPUInteltype {None, Celeron, Pentium4}然後,您可以稍後測試這些屬性,並且只有在該值不是無時才能工作。

1

而是創建了兩個枚舉,只需創建一個枚舉,CPUTye

public enum CPUTypeIntel 
{ 
    Celeron, 
    Pentium4, 
    ASeries, 
    ESeries 
} 

enum在.NET中無法實現的接口,而且該enum只是不同的類型,它由一組命名常量的。

編輯我不明白你爲什麼試圖有兩個enum時性質和定義幾乎相同。兩者都代表CPUType,並且對於所有CPUType都有一個單獨的命名列表,這是更合理的,然後以另一種方式解決問題。

+1

這適合你,路要走。 – user1765862

2

不,您不能在枚舉上實現接口。

你可以這樣做:

enum CPU 
{ 
    IntelCeleron, 
    IntelPentium, 
    AmdASeries, 
    AmdESeries 
} 

這種方法允許您根據只存在於該枚舉值來選擇一個CPU,或者你可以使用[System.Flags]

[System.Flags] 
enum CPU 
{ 
    Intel = 1, 
    Amd = 2, 
    Celeron = 4, 
    Pentium = 8, 
    ASeries = 16, 
    ESeries = 32 
} 

這將使你結合這樣的值

var cpu = CPU.Intel | CPU.Pentium; 

但它也打開了比賽場不正確的值如此

var cpu = CPU.Amd | CPU.Pentium;