學習列舉型別 FlagsAttribute屬性

2021-09-09 02:56:57 字數 2583 閱讀 6852

網上查了下資料,發現沒我想知道東西,只能自己研究一下,關於列舉的詳細由於晚上還有點事,就不怎麼寫了下面我給大家演示一下eum類中幾種方法enum.isdefined,enum.parse,enum.getname,enum.getnames,enum.getvalues.

先說一下system.enum類,它是所有列舉型別的抽象基類(它是一種與列舉型別的基礎型別不同的獨特型別),所有的列舉型別都是從它派生的,存在所有的列舉型別和enum類的裝箱和拆箱轉換。簡單說一下,直接上**了:

以下**最好自己複製執行一下,否則可能看不明白:

using

system;

public

class

enumtest

;class

test",

enum

.getname(

days

,1));

// 使用getnames演示列印所有列舉名:

string

enumnames

=enum

.getnames(

days);

//獲取所有列舉名

for (

inti=

0; i

<

enumnames

.length;

i++)-",i

,enumnames[i

]);}

//演示使用getvalue獲取並列印所有列舉值int

enumvalues

= ( int

)enum

.getvalues(

days);

for (

inti=

0; i

<

enumvalues

.length;

i++)-"

,enumvalues[i

],(days)

i);}//演示使用isdefined判斷列舉中是否存在具有指定列舉值

console

.writeline(

"enum.isdefined="

,enum

.isdefined(

days

,8));

//現在演示enum.parse

//將乙個或多個列舉常數的名稱或數字值的字串表示轉換成等效的列舉物件。

for(

inti=

0; i

<

enumnames

.length;

i++)-",i

,enum

.parse(

days,i

.tostring()));

//等價於

"-", (int)(enum.parse(days,i.tostring())),  enum.parse(days,i.tostring()));

//也等價於

//  console.writeline("-",i,enumnames[i]);

}console

.readkey();

}}}

flagsattribute 類

flagsattribute屬性就是列舉型別的一項可選屬性。它的主要作用是可以將列舉作為位域處理,所謂位域是單個儲存單元內相鄰二進位制位的集合。通過為列舉新增這個屬性,可以改變列舉的一些行為來滿足我們的需要,我先了解下兩條基本準則,以後在研究。1.只有要對數值執行按位運算(and、or、xor)時才對列舉使用 flagsattribute 自定義屬性。2. 必須用 2 的冪(即 1、2、4、8 等)定義列舉常量。這意味著組合的列舉常量中的各個標誌都不重疊。

下面看下我的舉例,很簡單拿個計算器試試就明白了。

using

system;

class

flagsattributedemo

;[flagsattribute]

enum

color2

:short

;static

void

main()

",mycolor1);

color1

mycolor_1

=color1

.red |

color1

.blue;

//我先不執行計算一下看看是那個:0001|0100=0101  應該是5

console

.writeline(

"mycolor_1="

,mycolor_1);

console

.writeline(

"測試使用flagsattribute屬性");

color2

mycolor2

=color2

.red |

color2

.blue;

//我先不執行計算一下看看是那個:0001|0100=0101應該是red,blue

console

.writeline(

"mycolor2="

,mycolor2);

console

.readkey();

}}

擴充套件型別 列舉型別

擴充套件型別 型別別名 列舉 介面 類。在型別約束位置,會產生重複 可以使用型別別名解決該問題 邏輯含義和真實的值產生了混淆,會導致修改真實的值的時候,產生大量的修改 字面量型別不會進入到編譯結果,比如我們想迴圈便利它的值,那麼就不行。所以需要使用列舉 enum gender gender.male...

使用列舉型別的值建立列舉型別

列舉型別中不僅可以宣告列舉的名稱,還可以加入附加的值如下式 public static enum pushtype public string tostring 其中push type sys稱為列舉的name,0則為列舉型別的value,那如何才能根據列舉型別的value獲取列舉型別的例項呢?見下...

C 列舉型別

c 中的列舉型別繼承於 c 語言。就像其他從 c 語言繼承過來的很多特性一樣,c 列舉也有缺點,這其中最顯著的莫過於作用域問題 在列舉型別中定義的常量,屬於定義列舉的作用域,而不屬於這個列舉型別。例如下面的示例 enum fileaccess fileaccess access read 正確 fi...