空类而不是枚举-糟糕的主意吗?

| 我目前正在使用一个枚举来描述许多可能的操作系统平台。我拥有WIN32,SOLARIS64,LINUX32,但也拥有更广泛的类别,例如ALLWIN和ALLUNIX。我在代码中有一个地方需要确定给定平台是否属于另一个平台。对我来说,这听起来像是继承,但显然枚举不能相互继承。 然后,我想到了将这些平台从1枚举变为彼此继承的空类。我觉得这在概念和空间上都是一个糟糕的主意,但不是C#的高手,我想我会在这里发布以寻求更多有经验的意见。有什么想法吗? 这看起来像:
public class ALL {};

  public class ALLWIN : ALL {};

    public class WINNT : ALLWIN{};

      public class WIN32 : WINNT{};
... 等等等等。     
已邀请:
您想为此使用枚举。您可以通过位掩码进行检查。类似于以下内容:
[FlagsAttribute]
enum Systems {
    WinNT = 1,
    Win32 = 2,
    Linux32 = 4,
    Solaris = 8,
    AllWin = WinNT | Win32, // do a bitwise OR of each of the Windows systems
    AllUnix = Linux32 | Solaris // same thing here for Unix systems
}
当您检查该平台是否为特定系统时,可以通过按位AND进行操作,如以下代码所示:
if (platform & Systems.AllWin > 0) { 
  // this is a Windows system 
}
那有意义吗?     
枚举不能继承,但是它们具有标志的概念,可以完成您尝试做的事情:
[FlagsAttribute]
enum OSs
{
   WinNT = 1;
   WinNXP = 2;
   AllWIN = WinNT | WinNXP;
}
等等... 链接到枚举。     
设计系统的关键部分之一就是能够定义您的域。这通常也是最难的部分。我建议退后一步。您需要定义什么?一个操作系统?操作系统有什么? 继承是一个功能强大的工具,但是这种情况似乎使自己具有“具有”关系,而不是“具有”关系。而不是让它们继承,而是定义一个具有属性的对象。考虑一下:
    public enum OperatingSystemFamily
    {
        Microsoft,
        linux,
        Mac
    }

    public class OperatingSystem
    {
        public string Name { get { return \"WINNT\"; } }
        public OperatingSystemFamily Family { get { return OperatingSystemFamily.Microsoft; } }
    }
这可能与您要完成的工作完全不符。 你怎么看? 如其他地方所述,使用枚举标志可以作为一种不错的轻量级解决方案。唯一要注意的是,您不能拥有超过64种操作系统和类别的组合。     

要回复问题请先登录注册