【问题标题】:Enum inheriting from int枚举继承自 int
【发布时间】:2011-09-14 23:45:20
【问题描述】:

我在这段代码中到处都发现了这一点:

public enum Blah: int
{
    blah = 0,
    blahblah = 1
}

为什么需要从 int 继承?需要吗?

【问题讨论】:

  • 顺便说一下,这是一个支持类型,而不是继承。
  • 有些人只是喜欢输入更多的东西来获得默认行为。我称他们为“this-ers”。
  • @keke:称他们为“私人”会更好。有时你需要this.,但你编辑:几乎从不需要写private
  • 虽然在这种情况下听起来是多余的,但您还应该查看整个代码库,其中在声明枚举时提供了不同的支持类型。其他支持类型,如 byte、Int16、Int32(或 int)、Int64(long)也是可能的。想象一下,在这种特殊情况下,您使用 4 字节的 RAM 内存只是为了保存 ONE BIT 信息。您当然应该将其更改为字节。字节可以很容易地包含从 0 到 255 的 256 个不同的整数值,这足以满足大多数基于枚举的场景。在高端硬件中,我们不关心这件事,但作为程序员,我们应该关心。

标签: c# .net inheritance enums


【解决方案1】:

根据documentation

每个枚举类型都有一个 基础类型,可以是任何 除 char 以外的整型。默认 枚举的基础类型 元素是 int。

所以,不,您不需要使用 int。它适用于任何整数类型。如果您不指定任何内容,它将使用 int 作为默认值,并且这种类型将用于将枚举存储到内存中。

【讨论】:

    【解决方案2】:

    枚举由整数隐式支持。
    : int 只是重申默认值,就像void M();private void M(); 一样。

    您还可以创建由其他整数类型支持的枚举,例如 enum GiantEnum : long

    【讨论】:

    • 我只是好奇是否有可能在任何地方找到backing 的定义?我觉得我有点理解它,但我想检查我的理解的正确性。
    • @qqqqqqq: CTRL + F : ushort here
    【解决方案3】:

    你不需要,这是暗示的。 According to MSDN:

    枚举是一组命名常量,其基础类型是除 Char 之外的任何整数类型。如果没有显式声明基础类型,则使用 Int32。 Enum 是 .NET Framework 中所有枚举的基类。

    这意味着您可以使用bytesbyteushortintuintlongulong

    此外,按照您描述的方式设置值(blah=0,blahblah=1)虽然是多余的,但可以,因为根据C# Specification

    如果枚举成员的声明没有初始化器,则隐式设置其关联值,如下:

    • 如果枚举成员是枚举类型中声明的第一个枚举成员,则其关联值为零。

    • 否则,枚举成员的关联值通过将文本前面的枚举成员的关联值加一来获得。这个增加的值必须在底层类型可以表示的值范围内,否则会出现编译时错误。

    【讨论】:

      【解决方案4】:

      int 默认是任何enum 的类型。不需要显式声明。

      当您想使用其他东西(bytelong 和朋友)时,它会更有用。

      【讨论】:

        【解决方案5】:

        您不需要需要int 继承,但默认情况下需要。如果您愿意,可以从其他整数类型(bytelong 等)继承。例如,如果您想在数据库中节省内存或列空间。

        【讨论】:

          【解决方案6】:

          大多数时候我不关心枚举是有符号还是无符号,或者它有多少位,所以我只是让系统使用它的默认值,即 int。

          但是,有时我确实关心枚举是带符号的 32 位 int,然后最好明确表示我确实关心。我希望得到评论以及说明为什么我在乎。

          【讨论】:

            【解决方案7】:

            据我所知,它给了它一个数值,仅此而已

            【讨论】:

            • 不,它已经有一个数值。如果您不指定支持类型,则默认为 int,因此指定 int 不会给它任何它没有的东西。
            【解决方案8】:

            您不需要继承,因为 Enum 的基本类型默认为 int。

            http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.71).aspx

            base-type (Optional)
            The underlying type that specifies the storage allocated for each enumerator. It can be one of the integral types except char. The default is int.
            

            【讨论】:

              【解决方案9】:

              一个枚举“成员”可以有一个潜在的“值”。继承自 int 会告诉您该值将采用什么类型。

              【讨论】:

                猜你喜欢
                • 2010-10-19
                • 2016-01-16
                • 2012-04-04
                • 2011-03-07
                相关资源
                最近更新 更多