如何解决空类而不是枚举-糟糕的主意吗?
| 我目前正在使用一个枚举来描述许多可能的操作系统平台。我拥有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种操作系统和类别的组合。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。