C# 从int继承的枚举

C# 从int继承的枚举,c#,.net,inheritance,enums,C#,.net,Inheritance,Enums,我在这段代码中到处都找到了: public enum Blah: int { blah = 0, blahblah = 1 } 为什么它需要从int继承?它需要吗?它给它一个数值,就我所知,枚举是由整数隐式支持的。 :int只是重申默认值,就像void M()vs.私有void M() 您还可以创建由其他整数类型支持的枚举,例如enum GiantEnum:long,具体操作如下: 每个枚举类型都有一个 基础类型,可以是任何 除char之外的整型。默认值 枚举的基础类型 元素是

我在这段代码中到处都找到了:

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

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

它给它一个数值,就我所知,枚举是由整数隐式支持的。
:int
只是重申默认值,就像
void M()vs.
私有void M()

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

,具体操作如下:

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


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

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


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


当您想使用其他内容(
byte
long
和friends>)时,它更有用。

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

枚举“成员”可以有一个底层“值”。int的继承告诉您值将采用什么类型。

您不需要这样做,这是隐含的:

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

这意味着您可以使用
byte
sbyte
ushort
int
uint
long
ulong

另外,按照您所描述的方式设置值(blah=0,blahblah=1),虽然是冗余的,但也可以,因为,根据

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

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

•否则,通过将文本上位于前面的枚举成员的关联值增加1,即可获得枚举成员的关联值。此增加的值必须在可由基础类型表示的值范围内,否则会发生编译时错误


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


然而,有时我确实关心enum是一个有符号的32位int,然后最好明确表示我确实关心它。我希望有人能给我一条评论,解释我为什么在乎。

顺便说一句,这是一种支持类型,而不是继承。有些人只是喜欢键入更多的东西来获得默认行为。我管他们叫“这个ers”。@keke:最好叫他们“私人ers”。有时您需要编写
这个。
,但您需要编辑:几乎不需要编写
private
@keke:虽然在这种情况下听起来很冗余,但您还应该查看整个代码库,其中声明枚举时提供了不同的支持类型。也可以使用其他支持类型,如byte、Int16、Int32(或int)、Int64(long)。想象一下,在这种特殊情况下,您使用4字节的RAM内存来保存一位信息。您当然应该将其更改为byte。字节可以轻松包含256个从0到255的不同整数值,这对于大多数基于枚举的方案来说已经足够了。在高端硬件中,我们不关心这个问题,但作为程序员我们应该关心。不,它已经有了一个数值。如果您不指定支持类型,默认情况下它是
int
,因此指定
int
不会给它提供任何它还没有的东西。我只是好奇是否可以在任何地方找到
支持的定义?我觉得我在某种程度上理解了它,但我想检查一下我理解的正确性。
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.