C 變數 常量 列舉 預處理器指令知多少

2022-03-14 06:25:31 字數 2944 閱讀 1552

一、變數

c#共有其中變數型別有:靜態變數、實類變數、陣列元素、數值引數、引用引數、輸出引數和區域性變數

先定義乙個簡單的類來說明,如下:

public

class

variabledefine

string

variablestr;

public variabledefine(string

version)

public

static

void

fun()

//////

變數型別

/// ///

intarray[0]陣列元素

///數值引數

///引用型別

///輸出引數

public

void fun(int intarray, int a, ref

int b, out

intc)

}

對於靜態變數在被建立載入之後失效,當被解除安裝後失效,靜態變數的初始值也為此型別的變數的預設值

對於例項變數當建立某類的乙個例項的時候,隸屬於該類的例項變數也被生成,當不再有關於這個例項的引用而且例項的析構函式執行了以後,此例項變數失效

對於陣列元素當任意乙個陣列例項被建立時,這個陣列的元素也被同時建立,當不再有任何正對這個陣列例項的引用時,它的元素也就此失效

當乙個不帶有ref 或out 修飾引數被宣告時,我們稱它為數值引數

引數當乙個帶有ref 修飾語的引數被宣告時,我們稱之為引用引數

引數當乙個帶有out 修飾語的引數被宣告時,我們稱之為輸出引數

區域性變數被區域性變數宣告語句建立

c#編譯器不容許在表示式中使用未初始化的變數

變數初始化要注意兩點的是:(1)變數是類或結構中的字段,如果沒有顯示初始化,建立這些變數時,其預設值就是0(2)方法的區域性變數必須在**中顯示初始化,之後才能在語句中使用它們的值。

二、常量

c#可以定義兩種型別的常量,靜態常量用const來定義在程式編譯的時候確定,一種是動態常量用readonly來定義在執行時確定

靜態常量使用方便,效能高,但一旦定義之後就不可以改變,在乙個引用第三方程式集上面如果定義了乙個靜態常量,當它定義的值改變時你不得不重新引用生成主程式

動態常量使用靈活,能很好的支援程式的擴充套件性

下面乙個事例就是通過讀取xml文件來給動態常量賦值

public

sealed

class

readonlymodel

//////

解析xml文件

/// ///

///private listgetlistcompany(ienumerableelements)

;listcompany.add(companymodel);

}return

listcompany;}}

根據傳入的路徑來解析xml檔案賦值給動態常量,能很好的擴充套件應用程式的常量值

三、列舉

列舉是使用者定義的整數型別,在宣告乙個列舉時,要指定該列舉的例項可以包含的一組可以接受的值,列舉具有如下的優勢:

1.列舉可以使**更易於維護,有助於確定給變數指定合法的,期望的值

2.列舉使**更清晰,允許用描述性的名稱來表示整數,而不是含義模糊、變化多端的數

3.列舉也是**更易於輸入

在實際應用中通常在列舉上面加上description需要顯示的列舉特性值,在頁面顯示的時候通常顯示的也是列舉的特性值,所以有必要寫乙個獲取列舉特性值的通用方法

class

program

company email is ", company.companyname, company.companyemail);

//}"company name is company email is ", constclass.companyname, constclass.companyemail);

memberlevel supermember =memberlevel.supermember;

console.writeline(supermember.getdescriptionenum());

console.readkey();}}

public

enum

memberlevel

public

static

class

enumextension

if (attr != null && !string

.isnullorempty(attr.description))

return

attr.description;

else

return

string

.empty;}}

參考部落格:列舉知多少

四、c#的預處理指令

使用預處理指令可以禁止編譯器編譯與額外功能相關的**,以控制不同版本擁有的功能,如企業版和基本版本

#define(給定名稱的符號)和#undef(刪除名稱的符號)一般與#if、#elif、#else、#endif結合起來使用如

沒有找到預定義的debug就不會執行 #if和#endif**塊裡面的語句,這也稱為條件編譯。

同樣的預處理器指令有:#warning和#error,當編譯器遇到它們時,會分別產生警告或錯誤,如果編譯器遇到#warning指令,會給使用者顯示#warning後面的文字,之後編譯繼續,如果編譯器遇到#error指令,就會給使用者顯示後面的文字,作為一條編譯錯誤訊息,然後立即退出編譯。

#region和#endregion指令用於把一段**標記為有給定名稱的乙個塊,#line指令用於改變編譯器在警告和錯誤資訊中顯示的檔名和行號資訊,#pragm可以印製或還原指定的編譯警告參考:

C 預處理器指令

c 預處理器指令是在編譯時呼叫的。預處理器指令 preprocessor directive 告訴c 編譯器要編譯哪些 並指出如何處理特定的錯誤和警告。c 預處理器指令還可以告訴c 編輯器有關 組織的資訊。1.定義符號和取消符號定義的預處理指令 define 和 undef 預處理指令都以 號開頭並...

C 預處理器指令

預處理器指令從來不會轉化為可執行 中的命令,但會影響編譯過程中的各個方面。實際應用如 計畫發布二個版本的 即基本版本和擁有更多功能的企業版本,就可以使用這些預處理器指令 另外在編寫提供除錯資訊的 時,也可以使用預處理器指令。下面介紹幾個常用到的預處理器指令 define 和 undef 用法如 de...

C 預處理器指令入門

一 c 預處理器指令入門 definenet11 net11,net20,必須放在檔案第一行 using system string sbeeptype s.replace skey,ifnet20 int.tryparse sbeeptype,out beeptype 在.net 2.0中才有的方...