文章目录
- 枚举
- 枚举是什么(what)
- 枚举的声明语法
- 使用枚举的优点(why)
- 结构体
- 概念(what)
- 使用结构体的好处(why)
- 示例代码
- 使用时机
- 枚举和结构体的优点
- 表格表示枚举和结构体的区别
枚举
枚举是什么(what)
枚举是一组命名整型变量。枚举类型是使用enum关键字声明的,是一些固定范围的值。(C#枚举是值类型,枚举包含自己的值,不能继承或传递继承)
枚举是一种定义常量的方式,它可以将一组有序的常量定义为枚举类型。使用枚举可以提高程序可读性,同时也方便进行程序设计和维护。枚举类型一旦定义,其成员的值不能被改变,因此其值是常量。
注意:在类上面声明,命名空间下面
枚举的声明语法
public enum<枚举类型名>
{
值1,
值2
};
使用枚举的优点(why)
- 可读性更高:使用枚举可以使代码更易于阅读和理解,因为它强制限制了变量可能的值。
- 可维护性更好:枚举的定义中列出的所有值是固定的,因此在更改或扩展代码时,它们可以提醒开发人员需要更新的所有相关部分。
- 更安全:使用枚举可以防止某些变量被赋予意外的值,从而减少错误的发生。
- 更具可移植性:枚举值是独立于特定的编程语言或硬件平台的。
- 更容易调试:在调试时,使用枚举可以使标识符更明确,从而更容易跟踪和定位问题。
- 更好的代码重构:使用枚举可以使代码更容易重构,因为它们提供了一种轻松地修改代码而不必更改变量类型或方法签名的方法。
- 节约内存空间:举例:1代表数学,2代表语文,3代表英语。这三个科目都是string类型。但1这三个数字是char类型,char比string占用空间少。
public enum Gender //声明枚举类型 public访问修饰符,有一些固定的范围的值
{
男,
女
}
class Program
{
static void Main(string[] args)
{
Gender gender = Gender.女;
int gender = (int)Gender.女; //enum——>int
Gender gender = (Gender )1; //int——>enum
string num = gender.ToString(); //string——>enum
Gender gender = (Gender)Enum.Parse(typeof(Gender), "女"); //enum——>string
Console.WriteLine(num); //显示枚举值
Console.ReadKey();
}
}
结构体
概念(what)
它使得一个单一变量可以存储各种数据类型的相关数据。创建用struct关键字
结构体是一种将多个非相同类型的数据封装在一起的复合数据类型。通过结构体,我们可以将数据组织成为一个逻辑上的单元。这种方法使得数据在程序中的使用更加清晰有序、方便维护。结构体的成员变量可以是不同的数据类型,包括内置类型和自定义类型。
使用结构体的好处(why)
一次声明多个不同类型的变量。为减少需要声明多次不同类型变量的冗余现象,声明一个结构体,里面可以有不同的类型的变量
结构是值类型,结构成员不能指定为abstract、virtual、protected,结构不支持继承
结构体中的字段不能赋予初始值。结构存储在栈中。
示例代码
声明语句(how)
[public] struct 结构名
{
结构体成员
}
public enum Gender //声明枚举
{
男, //值
女
}
public struct Person //声明结构体
{
public string _name; //字段,姓名 ,结构体成员
public Gender _gender; //性别
public int _age; //年龄
}
static void Main(string[] args)
{
Person XDperson; //声明XDperson,类型为Person
XDperson._name = "小邓";
XDperson._age = 18;
XDperson._gender = Gender.男;
Person XJperson; //声明XDperson,类型为Person
XJperson._name = "小姜";
XJperson._age = 18;
XJperson._gender = Gender.女;
Console.WriteLine(XDperson._name); //打印XDperson的信息
Console.WriteLine(XDperson._age );
Console.WriteLine(XDperson._gender);
Console.WriteLine(); //打印一行空行
Console.WriteLine(XJperson._name); //打印XDperson的信息
Console.WriteLine(XJperson._age);
Console.WriteLine(XJperson._gender);
Console.ReadKey();
}
使用时机
枚举和结构体的使用时机不同。当需要定义一组有序常量时,使用枚举。当需要组织多个数据成为一个逻辑单元时,使用结构体。在实际编程中,我们通常会同时使用枚举和结构体,以体现程序的结构化和清晰性。
枚举和结构体的优点
显而易见的。它们提供了一种清晰组织数据的方式,使得程序代码结构更加清晰,易于维护和扩展。同时,它们也提供了一种定义常量和数据类型的方式,提高了程序的可读性和可维护性。缺点在于,当需要定义的常量或数据类型的种类非常多时,定义枚举或结构体可能会使程序代码显得冗长。
下面给出C++中的枚举和结构体的定义和使用示例:
枚举:
enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
Weekday day = Thursday;
结构体:
struct student {
int id;
string name;
int age;
};
student stu = {1, "Tom", 18};
表格表示枚举和结构体的区别
特征 | 枚举 | 结构体 |
定义 | 由一组常量值构成的类型 | 由不同类型的数据集合构成的类型 |
取值 | 只能取枚举中定义的常量值 | 可以取任意合法值 |
存储 | 存储在栈中,占用固定空间 | 存储在堆或栈中,占用可变空间 |
计算 | 通常用于条件分支 | 通常用于组织数据 |
构造 | 可以通过枚举名和枚举值构造 | 可以通过名称和字段构造 |
相等比较 | 可以通过枚举值进行相等比较 | 可以通过所有字段进行相等比较 |
适用场景 | 状态判断、条件分支等 | 结构体对象表示数据实体、方法等 |