C 學習筆記2

2022-03-24 06:50:14 字數 3158 閱讀 5545

1. 可空型別(nullable)

?:單問號用於對int,double,bool 等無法直接賦值為null的資料型別進行null賦值,意思是這個資料型別是nullable型別的。

int? i = 3

等同於nullable

i = new nullable(3

);int i; //

預設值0

int? ii; //

預設值null

??:雙問號可用於判斷乙個變數在為null時返回乙個指定的值。

用處:在處理資料庫和其他可能未賦值的元素的資料型別時,將null賦值給數值型別或布林型別的功能特別有用。

宣告乙個nullable型別(可空型別)的語法如下:

< data_type> ? = null;

例子:

using

system;

namespace

,,,"

, num1, num2, num3, num4);

console.writeline(

"乙個可空的布林值:

", boolval);

console.readline();}}

}

結果

顯示可空型別的值: , 45,  , 3.14157

乙個可空的布林值:

null合併運算子(??)

null 合併運算子定義可空型別和引用型別的預設值。並且可以執行隱式型別轉換,如double?轉換為double

例子:

using

system;

namespace

", num3);

num3 = num2 ?? 5.44

; console.writeline(

"num3 的值:

", num3);

console.readline();}}

}

結果:

num3 的值: 5.34

num3 的值:

3.14157

2. c#預處理命令

預處理指令指導編譯器在實際編譯開始之前對資訊進行預處理。

#define預處理器指令建立符號常量。該命令只能在所有**最前面。

語法如下:

#define symbol

例子:

#define pi

using

system;

namespace

}}

條件指令

可以使用#if指令來建立乙個條件指令。條件指令用於測試符號是否為真。如果為真,編譯器會執行 #if 和下乙個指令之間的**。

語法如下:

#if symbol [operator symbol]...

其中,symbol 是要測試的符號名稱。您也可以使用 true 和 false,或在符號前放置否定運算子。

常見運算子有:

乙個以 #if 指令開始的條件指令,必須顯示地以乙個 #endif 指令終止。

注意#elif為正確寫法,沒有#else if

#define debug

#define vc_v10

using

system;

namespace

testclass

}}

上面**會執行成功,結果如下

debug and vc_v10 are defined

預處理器指令的用途理解:

在程式除錯和執行上有重要的作用。比如預處理器指令可以禁止編譯器編譯**的某一部分,如果計畫發布兩個版本的**,即基本版本和有更多功能的企業版本,就可以使用這些預處理器指令來控制。在編譯軟體的基本版本時,使用預處理器指令還可以禁止編譯器編譯於額外功能相關的**。另外,在編寫提供除錯資訊的**時,也可以使用預處理器指令進行控制。總的來說和普通的控制語句(if等)功能類似,方便在於預處理器指令包含的未執行部分是不需要編譯的。

3. c#特性

特性(attribute)用於在程式執行時傳遞程式中各種元素(如類、方法、結構、列舉、元件等)的形為資訊的宣告性標籤。可以通過使用特性項程式新增宣告性資訊。乙個宣告性標籤通過放置在它所應用的元素前面的方括號()來描述。

特性用於新增元資料。如編譯器指令和注釋、描述、方法、類等其他資訊。.net框架提供了兩種型別的特性:預定義特性和自定義特性。

規定特性

語法:

[attribute(positional_parameters, name_parameter =value, ...)]

element

特性的名稱和值事再方括號內規定的,放置在它所應用的元素之前。positional_parameters規定必須的資訊,name_parameter貴姓可選的資訊。

預定義特性

.net框架提供了三種預定義特性:

attributeusage描述了如何使用乙個自定義特性類。他古icing了特性可應用到的專案和型別。

該特性的語法如下:

[attributeusage(

validon,

allowmultiple=allowmultiple,

inherited=inherited

)]

例如:

[attributeusage(attributetargets.class |attributetargets.constructor |attributetargets.field |attributetargets.method |attributetargets.property, 

allowmultiple = true)]

conditional預定義特性標記了乙個條件方法,其執行依賴於指定的預處理識別符號。

它會引起方法呼叫的條件編譯,取決於指定的值,比如 debug 或 trace。例如,當除錯**時顯示變數的值。

語法如下:

[conditional(

conditionalsymbol

)]

例如:

[conditional("

debug

")]

C 學習筆記 2

ref 和out 都是是傳遞引用,out是返回值,兩者有一定的相同之處,不過也有不同點。使用ref 前必須對變數賦值,out不用。out的函式會清空變數,即使變數已經賦值也不行,退出函式時所有 out引用的變數都要賦值,ref引用的可以修改,也可以不修改。下面是使用 out和 ref進行陣列修改的例...

C 學習筆記(2)

定義 namespace a namespace a 系統會自動合併這兩個 使用時在前面加上using namespace a 或者a var來呼叫命名空間a中的變數和函式。wchar t雙位元組型變數,佔據2位元組,而char只佔據1位元組 wchar t wc l 中國 setlocale lc...

c 學習筆記 2

迴圈 while迴圈 計數控制迴圈 counter controlled loop 標記控制的迴圈 sentinel conrolled loop 在寫迴圈的過程中容易出現多一次或者少一次的錯誤 即差一錯誤 off by one error 計算減法 簡單 include include rand ...