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;
例子:
usingsystem;
namespace
,,,"
, num1, num2, num3, num4);
console.writeline(
"乙個可空的布林值:
", boolval);
console.readline();}}
}
結果
顯示可空型別的值: , 45, , 3.14157乙個可空的布林值:
null合併運算子(??)
null 合併運算子定義可空型別和引用型別的預設值。並且可以執行隱式型別轉換,如double?轉換為double
例子:
usingsystem;
namespace
", num3);
num3 = num2 ?? 5.44
; console.writeline(
"num3 的值:
", num3);
console.readline();}}
}
結果:
num3 的值: 5.34num3 的值:
3.14157
2. c#預處理命令
預處理指令指導編譯器在實際編譯開始之前對資訊進行預處理。
#define預處理器指令建立符號常量。該命令只能在所有**最前面。
語法如下:
#define symbol
例子:
#define piusing
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 ...