當前位置:首頁 » 存儲配置 » 枚舉的存儲

枚舉的存儲

發布時間: 2022-12-11 16:33:29

❶ c#的基本語法問題,枚舉類型在內存中是如何存在的

事實上並不是數組 而是利用反射

考慮如下代碼:

voidMain()
{
Console.WriteLine(typeof(Charac).GetEnumName(((Charac)1)));
Console.WriteLine(typeof(Charac).GetEnumName(((Charac)2)));
Console.WriteLine(typeof(Charac).GetEnumName(((Charac)3)));
}

enumCharac{
A=1,
B=2,
}

我們用Type.GetEnumName實例方法 把枚舉值映射回枚舉名

可以預見到 三次輸出分別是 A B null


在內存中 枚舉和對應的基本類型是存在映射關系的

如果未顯式聲明 意味著枚舉默認映射到Int32 換而言之 內存中存儲的就是Int32類型


另外 一切枚舉類型都隱式繼承System.Enum類型 以實現其中的ToString方法

而ToString方法中會做檢測:如果enum按位域聲明 則會返回按位或的字元串解釋

否則 內部執行Type.GetEnumName方法尋找對應的枚舉值名稱

如果未找到 直接輸出基礎類型(如int32)的值


更多的詳細信息可以參考CLR via C# 或者查看Enum類的源代碼-w-

❷ C++ 中的 enum 結構在內存中是怎麼存儲的

enum是常量,類似於#define,只不過它的成員值是編譯器自動賦值,也不可更改。
不存在存儲問題,它是直接在指令中以常數的形式存在。

❸ Pascal語言中的枚舉類型為什麼可以節省內存空間

pascal我沒有學過,不過我是這樣理解這句話的:

一個位元組最多可以表示256種狀態,應為2^8=256
上面這個例子可以這樣表示:
00000000表示紅,
00000001表示黃,
00000010表示藍,
00000011表示白,
這樣就只用了一個位元組,卻能表示四種顏色。
可以看到,其實還有00000100....等等在這個例子里沒有用到。其實最多一個位元組就可以表示256種狀態。
而用4個整形變數就會浪費很多空間,因為一個整數佔2個位元組。

❹ C# 枚舉為什麼要用一個INT類型來存儲

枚舉是一種特殊的類型,你可以看作一個類裡面有很多靜態屬性,每一個屬性只有 get行為,並且直接return 了一個 值,
所以它是整數類型的,可以顯式的 繼承 byte short int long ,默認是 int,

❺ 在資料庫中存枚舉值,用數字還是字元好

這個要看你的 枚舉, 是 僅僅一次只能選擇一個的? 還是一次可以選擇多個的.

例如你的
order_id order_status
1 SUCS(成功success)
2 PCES(處理process)

某行數據, 要麼就是 SUCS(成功success) , 要麼就是 PCES(處理process)
這種情況下, 用字元是比較合適的。

但是如果枚舉是可以選擇多個的, 例如:
id desc
1 無黨派
2 知識分子
4 少數民族
8 女性
16 ......

這種情況下, 如果一個人, 多個枚舉都滿足的情況下, 那麼這種情況下, 使用 數字 是比較適合的。
也就是
如果某個人,是 無黨派漢族女性研究生, 那麼枚舉值 = 1+2+8

❻ Swift-細說枚舉(Enum)

聲明一個方向的枚舉,包含四個枚舉值: 東/西/南/北.

Swift 的枚舉成員在被創建時本身就是完備的值,這些值的類型是已經明確定義好的 Direction 類型. 不會像 Objective-C 一樣被賦予一個默認的整型值。在上面的 Direction 例子中,east、west 、north、south不會被隱式地賦值為 0,1,2 和 3。

Swift 中的枚舉更加靈活,不必給每一個枚舉成員提供一個值。如果給枚舉成員提供一個值(稱為原始值),則該值的類型可以是:字元串、字元、任意的整數值或浮點類型。

Swift的枚舉類型提供了一個叫原始值(RawValues)的實現,它為枚舉項提供了一個默認值,這個默認值在編譯期間就是確定的。

通過原值值獲取的枚舉項是可選類型的,所以需要用if let 做一下判斷。

未指定枚舉值類型

隱式原始值

隱式原始值下枚舉項使用系統的分配值:

顯式原始值

隱式 + 顯式原始值

這里使用了屬性觀察者,Swift裡面的枚舉更像一個對象,因此可以很方便的使用屬性觀察者對枚舉值進行監聽。

在 Swift 中,還可以定義這樣的枚舉類型,它的每一個枚舉項都有一個附加信息,來擴充這個枚舉項的信息表示,這又叫做關聯值。

一定要學會使用關聯值,這一點很重要。具體的使用後面的第九節會細說

通常情況下枚舉是很容易進行相等判斷的。一旦為枚舉增加了關聯值,Swift就沒法正確的比較了,需要自己對該枚舉實現 == 運算符。

藉助 Comparable 協議,來實現枚舉的比較。

遵守 CaseIterable 協議的swift枚舉是可以遍歷的,通過allCases獲取所有的枚舉成員.

app裡面的介面地址,如果都放一起,命名或者尋找都不方便,可以用枚舉的嵌套來設計。可以分散在多個文件中,方便維護和管理。

用枚舉來管理系統裡面的常量是一個不錯的選擇。

枚舉中不能使用存儲屬性,但是可以使用計算屬性,計算屬性的內容是在枚舉值或者枚舉關聯值中得到的。

在這里,可以認為枚舉是一個類,introced是一個成員方法,AppleDeivce.iPhone 就是一個AppleDeivce的實例,case們是它的屬性。introced裡面的switch self,其實就是遍歷這個匿名屬性的所有場景,如iPad,iPhone等,然後根據不同的場景返回不同的值。

可以做枚舉的自定義構造方法。

系統的列印協議

讓枚舉遵守這個協議

枚舉可以進行擴展。可以將枚舉中的case與method/protocol分隔開,閱讀者可以快速消化枚舉的內容。

設計一個網路類下的錯誤信息的處理功能。

在項目中經常使用 UserDefaults 來存儲一下簡單的用戶信息。但是對 Key 的維護不會很方便。而且會想不起來。用枚舉+結構體就能很好的解決這個問題。

這么設計APP的存儲模塊,是不是更有層級感,更加方便使用呢?

遞歸枚舉是擁有另一個枚舉作為枚舉成員關聯值的枚舉。當編譯器操作遞歸枚舉時必須插入間接定址層。可以在聲明枚舉成員之前使用 indirect關鍵字來明確它是遞歸的。 也可以聲明在整個枚舉前,讓所有的枚舉成員都是遞歸的。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:600
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:892
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:586
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:771
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:690
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1017
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:261
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:120
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:810
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:719