替代方案
在我们公司,我们避免“跳过项目”以进入非通用低级项目。例如,我们的演示/API层只能引用我们的域层,域层只能引用数据层。
然而,当演示层和域层都需要引用枚举时,这就成了一个问题。
以下是我们实施的解决方案(目前为止)。这是一个相当好的解决方案,对我们很有效。其他答案也都涉及到了这个方面。
基本原则是枚举无法继承 - 但类可以。所以...
public abstract class BaseEnums
{
public enum ImportanceType
{
None = 0,
Success = 1,
Warning = 2,
Information = 3,
Exclamation = 4
}
[Flags]
public enum StatusType : Int32
{
None = 0,
Pending = 1,
Approved = 2,
Canceled = 4,
Accepted = (8 | Approved),
Rejected = 16,
Shipped = (32 | Accepted),
Reconciled = (64 | Shipped)
}
public enum Conveyance
{
None = 0,
Feet = 1,
Automobile = 2,
Bicycle = 3,
Motorcycle = 4,
TukTuk = 5,
Horse = 6,
Yak = 7,
Segue = 8
}
接着,在另一个更高级别的项目中“继承”这些枚举类型...
public sealed class SubEnums: BaseEnums
{
private SubEnums()
{}
}
这样做有三个真正的优势:
- 枚举定义在两个项目中都是自动相同的-按照定义。
- 对枚举定义进行任何更改,第二个项目都会自动反映这些更改,而不需要对第二个类进行任何修改。
- 这些枚举基于相同的代码-因此可以轻松比较这些值(但需要注意某些细节)。
要在第一个项目中引用这些枚举,请使用类的前缀:
BaseEnums.StatusType.Pending或将
"using static BaseEnums;" 语句添加到你的 usings 中。
然而,在处理继承类时,我无法让
“using static…” 方法起作用,因此所有对"继承枚举"的引用都需要加上类的前缀,例如
SubEnums.StatusType.Pending。如果有人想出了一种方式使
"using static" 方法可以在第二个项目中使用,请让我知道。
我相信这可以调整得更好-但实际上这个方法是可行的,我已经在工作项目中使用过。