先展示一段簡單代碼
// 定義枚舉
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#中強大的工具:
枚舉使代碼更清晰、更安全,避免魔術數字
結構體提供輕量級的數據封裝,適合小型數據集
二者結合可以創建高效、類型安全的領域模型