C#枚举、结构

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44800780/article/details/102698069

枚举

枚举是值类型

声明枚举

在这里插入图片描述
声明枚举使用enum关键字.

使用枚举

在这里插入图片描述
还可以用可空修饰符?创建可空枚举类型。

Season? a = null;

选择枚举字面值

枚举内部的每个元素都关联一个整数值。默认第一个元素对应整数位0,以后每个元素对应的整数都递增1.
在这里插入图片描述
可将特定整数常量和枚举类型的字面值手动关联起来,比如
在这里插入图片描述
后面的summer,Fall,Winter依次递增1,所以就是1,2,3,4.
在这里插入图片描述

选择枚举的基础类型

声明枚举时,枚举字面值默认是int类型.
也可以修改枚举的基础类型,比如:
在这里插入图片描述
这样做可以节省内存。枚举可以基于8中整型的任何一种:
byte,sbyte,short,ushort,int,uint,long,ulong.
比如byte,最多就只能容纳256个字面值.

结构

如果你学过C或者C++,对结构应该不陌生.在C#语言中,int,long和float分别是System.Int32,System.Int64和System.Single这三个结构的别名。
在这里插入图片描述
类定义的是引用类型,总是在堆上创建。有时类只包含极少数据,因为管理堆而产生的开销不合算。这时最好的方法是使用结构。结构是值类型,在栈上存储,能有效减少内存管理的开销。
结构可包含字段、方法和构造器(但不能主动声明默认构造器).

声明结构

声明结构以struct关键字开头。
比如
在这里插入图片描述
大多数时候不要在结构中声明公共字段,更好的做法是使用私有字段,并使用构造器和方法来初始化和处理字段.

复制值类型的变量将获得值的两个拷贝。复制引用类型的变量,将获得对同一个对象的两个引用。简单的、比较小的数据,复制值的效率基本等同于复制地址的效率,就使用结构。
如果较复杂的数据就要考虑使用类。

结构和类的区别

不能为结构声明默认构造器。因为编译器始终都会自动生成一个。而在类中,只有在自己没有写构造器的时,编译器才会自动生成一个默认的.
如果不想使用默认构造器,可以提供一个非默认的构造器,用它将字段初始化成不同的值.然而,自己写的构造器必须显式地初始化所有字段。

类的实例字段可在声明时初始化,但结构不允许。
在这里插入图片描述
在这里插入图片描述
和枚举一样,可用?修饰符创建可空结构.

结构的初始化

Time now = new Time();

在这里插入图片描述
由于结构是值类型,不调用构造器也可以创建结构变量

Time now;

虽然变量已经创建了,但其中的字段未初始化,试图访问这些字段会造成编译时错误.

复制结构变量

可将结构变量初始化或赋值为另一个结构变量,前提是赋值操作符=右侧的结构变量已完全初始化。

猜你喜欢

转载自blog.csdn.net/qq_44800780/article/details/102698069