C#枚舉/結構體講一講

先展示一段簡單代碼

// 定義枚舉
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)詳解

什么是枚舉?

枚舉是一種特殊的值類型,用于定義一組命名的常量值,提高代碼可讀性和可維護性。

關鍵特性:

  1. 強類型:提供類型安全的常量值

  2. 值類型:存儲在棧上,效率高

  3. 默認值:第一個元素值為0,后續遞增

  4. 可指定值:可以顯式指定值

// 顯式指定值
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)詳解

什么是結構體?

結構體是一種輕量級的自定義值類型,適合封裝小型數據組。

關鍵特性:

  1. 值類型:存儲在棧上(類存儲在堆上)

  2. 性能高效:適合小型數據結構

  3. 不支持繼承:不能從其他結構體或類繼承

  4. 可包含方法:可以定義成員方法

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();

實際應用場景

枚舉的典型應用:

  1. 狀態表示:如訂單狀態(待支付, 已發貨, 已完成)

  2. 選項配置:如日志級別(Debug, Info, Warning, Error)

  3. 方向控制:如游戲中的移動方向(上, 下, 左, 右)

結構體的典型應用:

  1. 坐標系統:表示2D/3D點

  2. 顏色表示:RGBA顏色值

  3. 性能敏感場景:游戲開發中的位置、旋轉等數據

//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; }
}

最佳實踐

  1. 命名規范

    • 枚舉使用單數名詞(Permission, DayOfWeek)

    • 結構體使用名詞(Point, Rectangle)

  2. 避免大型結構體:當數據超過16字節時,考慮使用類

  3. 不可變性:考慮將結構體設計為不可變類型

總結

結構體和枚舉是C#中強大的工具:

  • 枚舉使代碼更清晰、更安全,避免魔術數字

  • 結構體提供輕量級的數據封裝,適合小型數據集

  • 二者結合可以創建高效、類型安全的領域模型

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93041.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++-setmap詳解

Cset&map 1. 序列式容器和關聯式容器 1.1 序列式容器 序列式容器按照線性順序存儲元素,元素的位置取決于插入的時間和位置,與元素的值無關。 主要特點:元素按插入順序存儲可以通過位置(索引)直接訪問元素不自動排序…

解決程序連不上RabbitMQ:Attempting to connect to/access to vhost虛擬主機掛了的排錯與恢復

前言:在分布式系統里,RabbitMQ作為消息中間件,是服務間通信的關鍵紐帶。但實際使用中,程序連接RabbitMQ失敗的情況時有發生。本文結合真實報錯,細致呈現從問題發現到解決的完整排錯思路,還會深入講解Rabbit…

K8S中如何配置PDB(Pod Disruption Budget)

1. PDB 核心概念作用:控制自愿中斷(如節點升級、縮容)期間,應用的最小可用副本數或最大不可用比例。關鍵參數:minAvailable:必須保持運行的 Pod 數量(如 2 或 50%)。maxUnavailable&…

從 0 到 1:用 MyCat 打造可水平擴展的 MySQL 分庫分表架構

一、為什么要分庫分表? 單機 MySQL 的極限大致在:維度經驗值單表行數≤ 1 000 萬行(B 樹三層)單庫磁盤≤ 2 TB(SSD)單機 QPS≤ 1 萬(InnoDB)當業務繼續增長,數據量和并發…

電池模組奇異值分解降階模型

了解如何將奇異值分解 (SVD) 降階模型 (ROM) 應用于電池模塊熱模擬。挑戰隨著電池模塊在電動汽車和儲能系統中的重要性日益提升,其熱性能管理也成為一項重大的工程挑戰。高功率密度會產生大量熱量,如果散熱不當,可能導致電池性能下降、性能下…

《Python函數:從入門到精通,一文掌握函數編程精髓》

堅持用 清晰易懂的圖解 代碼語言,讓每個知識點變得簡單! 🚀呆頭個人主頁詳情 🌱 呆頭個人Gitee代碼倉庫 📌 呆頭詳細專欄系列 座右銘: “不患無位,患所以立。” Python函數:從入門到…

【記錄貼】STM32 I2C 控制 OLED 卡死?根源在 SR1 與 SR2 的讀取操作

問題描述最近在復用以前STM32F407控制OLED的代碼,移植到STM32F103 上,使用硬件 I2C 通信方式。按照常規流程,先發送 OLED 的從機地址,OLED 有正常應答,但當發送第一個控制命令(0xAE)前的控制字節…

【AI驅動的語義通信:突破比特傳輸的下一代通信范式】

文章目錄1 語義通信簡介1.1 基本概念:什么是語義通信?語義通信的核心目標1.2 基本結構:語義通信系統結構語義通信系統的通用結構組成語義通信系統的結構關鍵模塊1.3 基于大模型的語義通信關鍵技術🧠語義通信系統中AI大模型的設計建…

網絡原理-HTTP

應用層自定義協議自定義協議是指根據特定需求設計的通信規則,用于設備或系統間的數據交換。其核心在于定義數據結構、傳輸方式及處理邏輯。協議結構示例典型的自定義協議包含以下部分:頭部(Header):標識協議版本、數據…

ROS配置debug指南

一. 安裝插件 下面的這一個插件過期了需要用下面的這一個插件來替換:二. 設置CMakeLists.txt的編譯模式 set(CMAKE_BUILD_TYPE "Debug") set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAG…

微軟正式將GPT-5接入Microsoft Copilot Studio(國際版)

微軟宣布正式在Microsoft Copilot Studio(國際版)中集成GPT-5,推動智能體構建能力實現突破性升級。此次更新不僅為企業用戶帶來更高效的響應速度、更精準的語境理解能力,還通過增強的邏輯推理功能,顯著提升了AI交互的深…

微算法科技(NASDAQ:MLGO)通過蟻群算法求解資源分配的全局最優解,實現低能耗的區塊鏈資源分配

隨著區塊鏈網絡規模的不斷擴大和業務需求的日益復雜,資源分配問題逐漸成為制約其發展的關鍵因素之一。傳統的區塊鏈資源分配方法往往存在效率低下、能耗過高、難以達到全局最優解等問題。高能耗不僅增加了運營成本,還對環境造成了較大的壓力。因此&#…

深入淺出JVM:Java虛擬機的探秘之旅

深入淺出JVM:Java虛擬機的探秘之旅一、JVM 初相識:揭開神秘面紗 在 Java 的世界里,JVM(Java Virtual Machine,Java 虛擬機)就像是一個神秘的幕后大 boss,掌控著 Java 程序運行的方方面面。你可以…

Nginx學習筆記(八)—— Nginx緩存集成

🗄🗄 Nginx緩存集成 📌📌 一、緩存核心價值 #mermaid-svg-CNji1KUDOsF8MwoY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CNji1KUDOsF8MwoY .error-icon{fill:#5522…

httpx 設置速率控制 limit 時需要注意 timeout 包含 pool 中等待時間

假設通過 httpx.Client 設置 limit 速率控制后,同時發起多個請求訪問 youtube。并且由于科學原因一直連接不上 假設一共 4 個連接,max_connection2,timeout5s。 默認會發生的情況不是前兩個連接 tcp 握手 timeout,后兩個連接再發起…

【網絡】TCP/UDP總結復盤

1.UDP的格式2.TCP的格式3.TCP是來解決什么問題的?答:解決IP層的不可靠傳輸問題,可能數據包丟失、損壞、重復等為上層應用層提高可靠有序的數據傳輸服務通過校驗和、確認應答機制、序列號來解決不可靠傳輸和無序性問題通過流量控制--->>…

Nginx 配置中,root 和 alias 區別

在 Nginx 配置中,root 和 alias 都用于定義文件路徑,但它們的行為有重要區別,特別是 路徑拼接方式 和 末尾斜杠 (/) 的影響。1. root 和 alias 的區別 (1) root 指令 作用:root 會將 location 的 URI 拼接到 root 路徑后面&#x…

基于vue.js的無縫滾動

方法一&#xff1a;基于requestAnimationFrame demo <template><h-page-container class"hoem-page"><h1>無縫滾動</h1><h2>垂直方向</h2><div class"container1"><AutoScroll :data"list" :item-…

【Linux學習|黑馬筆記|Day4】IP地址、主機名、網絡請求、下載、端口、進程管理、主機狀態監控、環境變量、文件的上傳和下載、壓縮和解壓

【DAY4】 今天看的是Linux第四章剩余部分 至此Linux暫時學到這&#xff0c;第五章還包含很多軟件的安裝&#xff0c;但是等我要用的時候再裝吧 我現在只裝了MySQL8.0&#xff0c;具體教程請看筆記安裝教程 內容包含更換鏡像源和安裝配置步驟 文章目錄【DAY4】6&#xff09;IP地…

【合新通信】射頻光纖傳輸模塊詳解

射頻光纖傳輸模塊是一種將射頻(RF)信號通過光纖進行傳輸的關鍵設備&#xff0c;廣泛應用于通信、軍事、廣播電視等領域。以下是關于射頻光纖傳輸模塊的全面介紹&#xff1a;基本原理與組成射頻光纖傳輸模塊主要由以下幾部分組成&#xff1a;電光轉換單元&#xff1a;將輸入的射…