可以从界面派生枚举类型

时间:2014-01-16 09:02:16

标签: c# .net

我班上有三个枚举

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的propertytype。

如果那些是对象,我会从一些接口ICPUType派生它们,但在这种情况下(枚举)我卡住了。

更新: 让我解释一下这个属性SelectedType的用法。

用户将从CPUBrandEnum中选择cpu品牌类型,根据该值我将显示CPUTypeAMD的CPUTypeIntel。

因此,根据该值,SelectedCPUType可以是CPUTypeXXX枚举中的一个选择值。

5 个答案:

答案 0 :(得分:10)

不,枚举无法在.NET中实现接口。他们真的只是命名数字。

即使他们可能实现接口,您最终也可能会遇到不良数据(例如“Intel ASeries”。

目前还不清楚你想对这些值做什么,但是你可能只需要一个包含所有有效可能性的枚举。当然,这可能对您的真实情况不起作用。

答案 1 :(得分: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;

答案 2 :(得分:1)

enum无法实现接口。

如果你想要标记没有枚举值,那么你有两个选择。一个是有一个名为Unknown的枚举成员(或类似的东西)。例如:

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

另一种是使用可以为空的值:

public CPUBrandEnum? CPUBrand { get; set; }

答案 3 :(得分:1)

我将拥有CPUTypeIntel和CPUTypeAMD类型的两个属性,并且每个枚举的默认值为None,例如public enum CPUInteltype {None, Celeron, Pentium4}然后您可以稍后测试这些属性,只有在值不是None时才能工作。

答案 4 :(得分:1)

而是创建两个枚举,只需创建一个枚举CPUTye

public enum CPUTypeIntel 
{
   Celeron,
   Pentium4,
   ASeries,
   ESeries
}
.NET中的

enum无法实现接口,而且enum只是一个由一组命名常量组成的不同类型。

编辑我不明白为什么当性质和定义几乎相同时,你试图拥有两个enum。两者都代表CPUType并且对于所有CPUType都有一个命名列表,这比你解决问题的方式更合乎逻辑。

相关问题