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.