【发布时间】:2011-02-08 16:23:58
【问题描述】:
拥有的意义何在
enum SomeEnum : byte // <----
{
SomeValue = 0x01,
...
}
当您必须进行强制转换以将其分配给与枚举基础类型相同类型的变量时?
byte b = (byte)SomeEnum.SomeValue;
【问题讨论】:
拥有的意义何在
enum SomeEnum : byte // <----
{
SomeValue = 0x01,
...
}
当您必须进行强制转换以将其分配给与枚举基础类型相同类型的变量时?
byte b = (byte)SomeEnum.SomeValue;
【问题讨论】:
其实没什么意义,除非默认基础类型 (int) 对您来说不够用,即。如果您想使用比这更高的整数值,那么您可以将其设为long。当您的 [Flags] 枚举值超过 32 个时,这会很有用。
您可以将其设为 byte 或 short 只是为了限制值的范围,但它实际上仍需要 4 个字节(即与 int 相同)。
【讨论】:
byte[] 而不是 int[]。
底层类型指定了多少 为每个分配存储 枚举器。然而,一个明确的演员表 需要从枚举类型转换为 一个整数类型。
【讨论】:
除了技术原因...这里还有一个设计原则。
将枚举指定为具有字节存储是一个实现细节。使用枚举是一个不同的问题,您不必知道或关心它的实现细节。
在客户端代码中,您使用枚举的事实应该意味着您实际上是在使用枚举,而不是字节或长等。否则为什么不只使用您的意思的数据类型。
诸如 C# 之类的强类型语言会努力让您更难以超越您的编码“合同”,这通常有助于使应用程序设计更好一点。
当然,我并不是说您不必参与实现细节,一个很好的例子是对象关系映射器 (ORM),您将 C# 数据类型映射到数据库数据类型,枚举是一个很好的例子,你必须知道它的存储类型才能映射它。但在这些情况下,IMO 很好地必须明确地投射或反映,它在评论中是一个很好的标志,表明你在这里特别地超出了通常的用法。
【讨论】: