我需要决定是否在我的项目中使用enum
。为了做出决策,我需要知道enum
变量的大小。
enum Player
{
First,
Second,
Third,
Fourth
};
private Player _owner;
_owner
将会占用多少内存?
我在 C# 中没有找到相关的信息,所以这个关于 C++ 和 Java 的话题不适用:枚举类型占用多少内存?
Enum
值在编译时被转换为基础类型的值。因此,枚举类型本身基于int
类型(这是默认类型)的变量与您代码中的任何其他int
变量一样,并不会使用更多的内存。
Enum
的底层结构可以是以下任何一种:
byte
sbyte
short
ushort
int
uint
long
ulong
由于您的Player
枚举类型未指定基础类型,编译器将其视为基于int
的Enum
。如果内存是一个问题,您可能需要考虑将其声明为派生自byte
的类型:
enum Player : byte
{
First,
Second,
Third,
Fourth
};
请注意:新声明的Enum
变量将具有与其基础类型默认值相同的值,该默认值始终为零。在未指定文字值的枚举中,列表中的第一项被视为默认值。在您的情况下,那将是First
。
private Player _owner; // this value will initially equals Player.First
您可能希望插入一个额外的Player
文字,标记为None
、Empty
或Undefined
,以表示Player
变量的默认值:
enum Player : byte
{
Undefined = 0;
First,
Second,
Third,
Fourth
};
private Player _owner; // this value will initially equals Player.Undefined
当然,如果你不介意将 First
作为默认值,可以保持原样。但要注意,没有专门的默认 Enum
值通常被认为是一种不好的编程实践。
作为替代方案,由于任何 Enum
都是基于结构的,因此您还可以将 _owner
变量声明为 Player?
,这样它将默认为 null
:
private Player? _owner; // this value will initially equals null
总之,记住枚举
字面值仅仅充当其基础类型的常量。它们的目的是使代码更易于阅读,并在编译时强制使用有限的一组可能值。
要了解更多信息,请查看文档。
byte
或sbyte
)。 - user743382
enum
中4个整数占用的空间,我认为你正在查看128字节。 - Mike Perrenoud