枚举和常量。哪个用的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举和常量。哪个用的?相关的知识,希望对你有一定的参考价值。

我正在对枚举进行一些阅读,发现它们与声明常量非常相似。我怎么知道何时使用常量而不是枚举,反之亦然。使用枚举有哪些优点?

答案

如果要定义某些值可以使用的值,请使用枚举。颜色是一个明显的例子,如:

public enum Colour
{
    White,
    Red,
    Blue
}

或者也许是一组可能的事情:(例如我从here偷走,因为我很懒)

[FlagsAttribute]
enum DistributedChannel
{
  None = 0,
  Transacted = 1,
  Queued = 2,
  Encrypted = 4,
  Persisted = 16,
  FaultTolerant = Transacted | Queued | Persisted
}

常量应该是单个值,如PI。没有一系列PI值,只有PI。

另一答案

其他答案缺少的是枚举有一个整数基类型。您可以将默认值从int更改为除char之外的任何其他整数类型:

enum LongEnum : long {
    foo,
    bar,
}

您可以显式地和隐式地转换为基类型,这在switch语句中很有用。请注意,即使枚举没有具有适当值的成员,也可以将基类型的任何值强制转换为枚举。因此,始终使用开关中的默认部分是个好主意。 BTW,.NET本身甚至允许浮点值枚举,但你不能用C#定义它们,虽然我认为你仍然可以使用它们(交换机除外)。

此外,使用枚举可以提供更多的类型安全性。如果您打算使用例如int常量作为方法参数,然后我可以使用任何int值调用该方法。当然,通过铸造也可以使用枚举,但不会偶然发生。更糟糕的是混淆参数顺序的可能性。

void method(int a, int b) {...}

如果常量A只能进入a而常量B只能进入b,那么使用两种不同的枚举类型将在编译期间发现任何误用。

另一答案

常量是一种语言特性,它表示变量不会改变值(因此编译器可以围绕该知识进行优化),其中枚举是特定类型。

常量可以是任何数据类型,但枚举是枚举。

我在任何可以提供多种选项的地方使用枚举,并希望提高代码的可读性。即,您可以将跟踪级别设置为值为0,1,2的int或作为错误,警告和信息的枚举。

Enum还可以用作按位运算符,即FontStyle.Bold | FontStyle.Italic会为您提供粗体和斜体字体。

另一答案

除了罗伯特的回答:

  1. 将枚举用于一组有限的命名值。您并不真正关心每个符号背后的数值(但您仍然可以强加它们,例如,为了与遗留系统兼容)。
  2. 罗伯特:是的,Enum可以用作位字段。使用Flags属性(并确保枚举的成员具有合适的数值)。
另一答案

C#常量类似于变量,因为它为值提供了定义的名称。但是,常量与标准变量不同,因为一旦定义,分配给常量的值就永远不会改变。常量的主要好处是它们可以帮助创建自我记录代码,并允许在一个地方声明键值,如果需要更新值并重新编译软件,则可以轻松维护。

而枚举器列表对于定义序列和状态非常有用,特别是当这些状态存在自然进展时。这是因为列表中的每个常量都可以使用其名称或值进行格式化和比较。枚举也可用于定义一组有限的有效值。

另一答案

使用enum而不是const时我觉得有用的一点就是你可以迭代enum中的值,用const值更难做到这一点。

以上是关于枚举和常量。哪个用的?的主要内容,如果未能解决你的问题,请参考以下文章

C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法

JAVA枚举小结

优雅管理代码中的常量

接口常量类常量枚举类

编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议83~87)

代码技术规范