先展示一段简单代码
// 定义枚举
public enum thisday
{吃饭,不吃
}// 定义结构体
public struct person
{public string name;public int age;public thisday zhuangtai; // 使用枚举类型作为字段
}static void Main(string[] args)
{// 创建结构体实例person thisperson;thisperson.name = "laowang";thisperson.age = 55;thisperson.zhuangtai = thisday.不吃; // 设置枚举值// 输出结构体内容Console.WriteLine("{0}{1}{2}", thisperson.name, thisperson.age, thisperson.zhuangtai);Console.ReadKey();
}
枚举(Enum)详解
什么是枚举?
枚举是一种特殊的值类型,用于定义一组命名的常量值,提高代码可读性和可维护性。
关键特性:
强类型:提供类型安全的常量值
值类型:存储在栈上,效率高
默认值:第一个元素值为0,后续递增
可指定值:可以显式指定值
// 显式指定值
public enum StatusCode
{Success = 200,NotFound = 404,ServerError = 500
}// 位标志枚举
[Flags]
public enum Permissions
{None = 0,Read = 1,Write = 2,Execute = 4,All = Read | Write | Execute
}// 使用示例
var currentPermissions = Permissions.Read | Permissions.Write;
Console.WriteLine(currentPermissions.HasFlag(Permissions.Write)); // true
结构体(Struct)详解
什么是结构体?
结构体是一种轻量级的自定义值类型,适合封装小型数据组。
关键特性:
值类型:存储在栈上(类存储在堆上)
性能高效:适合小型数据结构
不支持继承:不能从其他结构体或类继承
可包含方法:可以定义成员方法
public struct Person
{// 使用属性而不是公共字段public string Name { get; set; }public int Age { get; set; }public ThisDay Status { get; set; } // 使用枚举属性// 结构体构造函数public Person(string name, int age, ThisDay status){Name = name;Age = age;Status = status;}// 结构体方法public void PrintInfo(){Console.WriteLine($"姓名: {Name}, 年龄: {Age}, 状态: {Status}");}
}// 使用构造函数初始化
Person person = new Person("小明", 25, ThisDay.吃饭);
person.PrintInfo();// 修改属性
person.Status = ThisDay.不吃;
person.PrintInfo();
实际应用场景
枚举的典型应用:
状态表示:如订单状态(待支付, 已发货, 已完成)
选项配置:如日志级别(Debug, Info, Warning, Error)
方向控制:如游戏中的移动方向(上, 下, 左, 右)
结构体的典型应用:
坐标系统:表示2D/3D点
颜色表示:RGBA颜色值
性能敏感场景:游戏开发中的位置、旋转等数据
//2d
public struct Point
{public int X { get; set; }public int Y { get; set; }public double DistanceTo(Point other){return Math.Sqrt(Math.Pow(X - other.X, 2) + Math.Pow(Y - other.Y, 2));}
}
//颜色
public struct Color
{public byte R { get; set; }public byte G { get; set; }public byte B { get; set; }public byte A { get; set; }
}
最佳实践
命名规范:
枚举使用单数名词(Permission, DayOfWeek)
结构体使用名词(Point, Rectangle)
避免大型结构体:当数据超过16字节时,考虑使用类
不可变性:考虑将结构体设计为不可变类型
总结
结构体和枚举是C#中强大的工具:
枚举使代码更清晰、更安全,避免魔术数字
结构体提供轻量级的数据封装,适合小型数据集
二者结合可以创建高效、类型安全的领域模型