第十五章 列舉型別和位標誌

2022-07-16 08:54:11 字數 1353 閱讀 7734

目錄:

15.1 列舉型別和位標誌

15.2 位標誌

15.3 向列舉型別新增方法

列舉型別定義了一組「符號名稱/值」配對。

列舉型別使程式更容易編寫,閱讀和維護。

列舉型別時強型別的。

列舉型別從system.enum派生,是值型別,可用未裝箱和已裝箱的形式來表示。但不能定義任何方法,屬性或事件。可利用c#的「擴充套件方法「功能模擬向列舉型別新增方法。

編譯列舉型別時,c#編譯器把每個符號轉換成型別的乙個常量字段。簡單地說,列舉型別只是乙個結構,其中定義了一組常量欄位和乙個例項字段。產量欄位會嵌入程式集的元資料中,並可通過反射來范文。這意味者可以在執行時獲得與列舉型別關聯的所有符合及其值。還意味著可以將字串符號轉換成對應的數值。

經常需要列舉型別表示一組可以組合的位標誌。列舉型別表示單個數值,而位標識表示集合,其中一些位於on狀態,一些處於off狀態。(進製1代表「on」,二進位制0代表「off」)

定義用於標識位標誌的列舉型別時,當然應該顯示為每個符號分配乙個數值。每個符號都有單獨的乙個處於on狀態。此外,經常都要定義乙個值為0的none符號。

應用了【flags】特性,tostring方法的工作過程:

1.獲取列舉型別定義的數值集合,降序排列這些數值。

2.每個數值都和列舉例項中的值進行「按位與」計算,假如結果等於數值,與該數值關聯的字串就附加到輸出字串上,對應的位會被認為已經考慮過了,會被關閉(設為0)。這一步不斷重複,直到檢查完所有數值,或直到列舉例項的所有位都被關閉。

3.檢查完所有數值後,如果列舉例項仍不為0,表明列舉例項中一些處於on狀態的位不對應任何已定義的符號。在這種情況下,tostring將列舉例項中的原始數值作為字串返回。

4.如果列舉例項原始值不為0,返回符號之間以逗號分隔的字串。

5.如果列舉例項原始值為0,而列舉型別定義的乙個符號對應的值是0值,就返回這個符號。

6.如果到達這一步,就返回0

parse和tryparse方法在呼叫時,會在內部執行以下動作:

1.刪除字串頭尾所有空白字元。

2.如果字串第乙個字元時數字,加號(+)或減號(-),該字串會被認為是乙個數字,方法返回乙個列舉型別例項,其數值等於字串轉換後的數值。

3.傳遞的字串被分解為一組以逗號分隔的token,每個token的空白字串都被刪除。

4.在列舉型別的已定義符號中查詢每個token字串。如果沒有找到相應的符號,parse會丟擲system.argumentexception異常;tryparse返回false。如果找到符號,就將它對應的輸賬號與當前的乙個動態結果進行「按位或」計算,在查詢下乙個符號。

5.查詢並找到了所有標記之後,返回這個動態結果。

可利用c#的擴充套件方法功能模擬向列舉型別新增方法。

第十五章預習

public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...

第15章 列舉型別和位標誌

enumeration提供了一些非常炫酷的功能,相信大多數開發人員都不熟悉。這些新功能極大的簡化了應用程式開發。列舉型別 enumerated types 定義了一組 符號名稱 值 配對。以下color型別定義了一組符號,每個符號都標識一種顏色 internal enum color white,賦...

learn with python 第十五章 繼承

第十六章 繼承 16.1繼承 物件導向語言所擁有的特性是繼承,繼承指定義乙個新的類擁有原來類的方法。繼承最大的好處就是可以在不改變現存 的情況下新增新的方法,稱之為繼承是因為新定義的類擁有父類的所有方法。新建立的類知之為子類。繼承是乙個功能強大的特性,某些情況下如果沒有繼承,一些層序幾乎無法實現。同...