在枚举上覆盖int

Gur*_*epS 0 .net c# enums

我看到一些.NET 2.0代码看起来像这样:

 public enum abc : int
 {
  value1 = 1,
  value2 = 2,
  value3 = 4
 }
Run Code Online (Sandbox Code Playgroud)

等等...

现在我知道标志枚举可以用于位值(如上所述,对吗?)所以你可以做| "或"等等,但不使用它的原因是什么?重写int有什么意义?

如果我设计一个用于选择多个值的枚举,我会使用flags属性而不是覆盖任何东西(我不明白).上述方法是什么网?

谢谢

Gre*_*ech 9

它不是"重写" int,它表示枚举的基础类型.默认是int这样实际上没有实现任何东西,但在某些情况下,您可能希望以枚举为基础long来存储更多标志,或者byte如果枚举周围有很多实例而节省空间,它只有少数值,但框架设计指南中的建议是使用,int除非你有充分的理由不这样做.

如果这是一个标志枚举,那么它应该标记[Flags],这似乎是这里的意图,所以遗漏看起来像一个错误.你仍然可以使用按位运算符组合值,即使它没有标记[Flags],但是从内存中我认为你得到编译器警告(或者它可能是一个FxCop警告,或者可能是一个ReSharper警告......).