c列舉定義前的Flags是什麼意思

2021-03-06 17:24:27 字數 5475 閱讀 5346

1樓:du瓶邪

這種用處很大,比如許可權、執行狀態等,都可以用一個int型儲存到資料庫中,c#中使用列舉可以處理這個問題。

[flags]

public enum permission在資料庫中判斷:

and (@permission is null or @permission=0 or permission &@permission =@permission)

2樓:匿名使用者

設定一個變數flag,是一個來表示判斷的變數,當做標誌

3樓:匿名使用者

|class flagsattributedemo

;// define an enum with flagsattribute.

[flagsattribute]

enum multihue : short

;static void main( )

- ",

val, ( (singlehue)val ).tostring( ) );

console.writeline(

"\nall possible ***binations of values of an \n" +

"enum with flagsattribute:\n" );

// display all possible ***binations of values.

// also display an invalid value.

for( int val = 0; val <= 8; val++ )

console.writeline( " - ",

val, ( (multihue)val ).tostring( ) );

} }/*this example of the flagsattribute attribute

generates the following output.

all possible ***binations of values of an

enum without flagsattribute:

0 - black

1 - red

2 - green

3 - 3

4 - blue

5 - 5

6 - 6

7 - 7

8 - 8

all possible ***binations of values of an

enum with flagsattribute:

0 - black

1 - red

2 - green

3 - red | green

4 - blue

5 - red | blue

6 - green | blue

7 - red | green | blue

8 - 8*/

4樓:

加個屬性是程式集的說明資訊

5樓:

到這看看

6樓:匿名使用者

指示可以將列舉作為位域(即一組標誌)處理。

c#中怎樣定義列舉?

7樓:聽雨知秋寒

建議:最好是定義一個類,裡面全放列舉

如 :public class publicenum}

8樓:仰起臉__微笑

public enum **

c#中的列舉怎麼使用

9樓:唯吾獨尊的工具

列舉型別是一種的值型別,它用於宣告一組命名的常數。

(1)列舉的宣告:列舉宣告用於宣告新的列舉型別。

訪問修辭符 enum 列舉名:基礎型別

基礎型別必須能夠表示該列舉中定義的所有列舉數值。列舉宣告可以顯式地宣告 byte、sbyte、short、ushort、int、uint、long 或 ulong 型別作為對應的基礎型別。沒有顯式地宣告基礎型別的列舉宣告意味著所對應的基礎型別是 int。

(2)列舉成員

列舉成員是該列舉型別的命名常數。任意兩個列舉成員不能具有相同的名稱。每個列舉成員均具有相關聯的常數值。

此值的型別就是列舉的基礎型別。每個列舉成員的常數值必須在該列舉的基礎型別的範圍之內。

示例:public enum timeofday:uint

產生編譯時錯誤,原因是常數值 -1、-2 和 –3 不在基礎整型 uint 的範圍內。

(3)列舉成員預設值

在列舉型別中宣告的第一個列舉成員它的默值為零。

以後的列舉成員值是將前一個列舉成員(按照文字順序)的值加 1 得到的。這樣增加後的值必須在該基礎型別可表示的值的範圍內;否則,會出現編譯時錯誤。

示例:public enum timeofday:uint

morning的值為0,afternoon的值為1,evening的值為2。

(4)為列舉成員顯示賦值

允許多個列舉成員有相同的值.

沒有顯示賦值的列舉成員的值,總是前一個列舉成員的值+1.

示例public enum number

b的值為2,d的值為2.

注意:以上列舉值都不能超過它的基礎型別範圍。否則會報錯.

(5)列舉型別與基礎型別的轉換

基礎型別不能隱式轉換為列舉型別

列舉型別也不能隱式轉換為基礎型別

示例:public enum number

class test

}(6)system.enum型別

system.enum 型別是所有列舉型別的抽象基類,並且從 system.enum 繼承的成員在任何列舉型別中都可用。

system.enum 本身不是列舉型別。相反,它是一個類型別,所有列舉型別都是從它派生的。

system.enum 從型別 system.valuetype派生

(7)使用列舉型別

using system;

public enum timeofday

class test

}static void main()

} 一、c#列舉函式用法

1.列舉數大小寫敏感

比如以下列舉有兩個列舉數:

enum enumtest ; //儘管如此,我們仍不推薦這樣寫

2.取列舉數的值

雖然列舉有型別,但取列舉數的值時,仍然需要進行型別轉換。

public partial class _enum : system.web.ui.page

;protected void page_load(object sender, eventargs e)

}3.列舉不能放在函式中

列舉可以與類平級,也可以作為類的 field,但不能放在函式中。可以加 public 等修飾符。

二、使用列舉時的建議:

1、優先考慮使用列舉,而不是類的靜態常量

比如:public static class day

應該使用如下的列舉:

enum day ;

2、如果引數、返回值、變數等型別可以是列舉,則不要使用其它基礎型別

比如:range r = range.max; //好

int r = (int)range.max; //不好

3、列舉命名

列舉一般使用名詞或名片語合,簡單列舉使用單數,標誌列舉使用複數。

4、大多數情況下不需要更改列舉的預設型別

也就是說大多數情況下,使用 int(system.int32)作為列舉型別。除非:

·列舉是標誌列舉,且標誌多於 32 個(此時 int 型別裝不下)。

·列舉被非常大量且頻繁地使用,為了節約空間使用小於 int 的型別。

·不得不使用其它型別的情況。

5、不要在列舉中設定哨兵

我們可能覺得在列舉的兩端加上哨兵,這樣在判斷一個數是否在列舉中時,只需要判斷是否在哨兵之中。 非常不幸,我們不應該這麼做,這破壞了列舉的意義。

enum day ; //firstvalue、lastvalue 應該去掉

三、簡單列舉和標誌列舉

1、簡單列舉

前面提到的 day、range 都可以稱之為簡單列舉,因為不能將他們各自的值組合起來。

簡單列舉包含的值不用於組合,也不用於按位比較。

2、標誌列舉

標誌列舉應使用按位 or 操作進行組合。

標誌列舉的設計有兩點要注意:

·指明 flagsattribute,以指示可以將列舉作為位域(即一組標誌)處理。

·列舉中各標誌的值應該是以 2 的冪來賦值,即:1、2、4、8、16、32……

舉個例子,假如我們在設計 windows 視窗程式,視窗有最小化、最大化、關閉按鈕,我們想任意組合顯示,也就是說我們可以顯示其中的任意 0 個或一個或多個按鈕。

如果使用簡單列舉,按照排列組合,我們要使用 1 + 3 + 3 + 1 = 8 個列舉數,如果這裡不是三個按鈕,而是四個按鈕,列舉數就更多了。所以這樣不現實。為什麼這裡使用簡單列舉不現實呢?

因為簡單列舉不能組合,採用標誌列舉就可以輕鬆解決了。

[flags]

public enum windowstyle

我們在設定視窗樣式時,利用 or 自由組合:

windowstyle ws = windowstyle.minimum_button | windowstyle.close_button; //表示既有 minimum_button 也有 close_button

這就是為什麼標誌的值要按 2 的冪排列的原因了,也是為什麼標誌多於 32 個時不能使用 int 型別的原因了。

通常我們為常用的標誌組合提供特殊的列舉值

仍然以上述視窗為例,可知大多數情況下,我們均要顯示這三個按鈕,所以每次使用時都要用:

windowstyle ws = windowstyle.minimum_button | maximum_button | windowstyle.close_button;

實在有些繁瑣,我們可以修改列舉為如下:

[flags]

public enum windowstyle

增加一個 all_button 為前三個標誌的值。使用時直接用 all_button 就可以了。

using system;

using system.collections.generic;

using system.text;

using system.globalization;

namespace test

public class publicbll

set }}

}publicbll.itemtype返回的就是int型的1 or 2 or 3。

如若判斷其值是否等於一個列舉

if (publicbll.itemtype==(int)style.lenovo)。

什麼是巨集定義,在C語言中 巨集定義是什麼?

巨集定義是高階語言編譯器提供的常用語法,其目的是利用某一識別符號標識某個文字字串。在編寫程式時,如果程式中反覆地使用某個資料或某段程式片段,就可以考慮將這個資料或程式片段定義為巨集,然後每個出現該資料或程式片段的地方用巨集名替代 選擇巨集定義來做的好處是程式簡潔,可讀性好,而且當需要修改這些相同的程...

c語言和c 在宣告和定義之間的區別是什麼

1.變數的宣告,基本與定義是一樣的,即宣告變數處即是定義了改變數,如int a 在處定義了變數。從概念上講,宣告即是讓編譯器知道要宣告的物件是個函式,類,變數等,不為它分配實際的記憶體空間。所以有函式宣告,變數宣告,類宣告。主要區別是表現在一個類中 class student student stu...

c語言中函式定義中的冒號是什麼意思

1 表示機來構內位域的定義 源即該變數佔幾個baibit空間 如下 duzhi typedef struct 2 建構函式後面的冒號 dao起分割作用,是類給成員變數賦值的方法,初始化列表,更適用於成員變數的常量const型。如下 struct 3 public 和private 後面的冒號,表示後...