自動屬性
下面兩種寫法作用相同.前者屬於自動屬性.在使用自動屬性時應該注意:get和set訪問器不能有具體的實現.
可空型別(可以為空的值型別)
對於值型別而言,c#規定:在定義變數的同時必須要對其賦初值,否則可能無法通過編譯器的編譯.但是在某些情況下,使用者事先是不知道變數的初始值是多少的.因為可以為空的值型別就顯得很重要.
值型別包括:int\double\float\decimal\bool\char
可為空的語法為:nullable,其中t指代上面具體的某種值型別
比如,可以為空的int型別:nullable;可以為空的bool型別:nullable
可以為空的變數,在賦值時,可以將null賦值給它.
例如:nullable age = null;
nullable可以簡寫為:t?
例如: nullable age = null;等價於int? age = null;
下面兩種寫法都是錯誤的.
string? name = null; student? stu = null;
因為string和student都是引用型別.
可空值型別的常用屬性:
hasvalue:布林型別,如果欄位不為null返回true,否則返回false.
value:獲取欄位的值,如果該字段的值為null,那麼呼叫value屬性會報錯
泛型類
list:t可以指代任何型別,比如:int\bool\string\student…
dictionary:字典類,其中t和k可以指代任何型別
keyvaluepair:鍵值對型別
物件初始化器
利用物件初始化器,在例項化乙個類物件的同時可以為它的屬性賦值.
集合初始化器
利用集合初始化器,可以在例項化乙個集合物件時為它指定元素
var關鍵字
var用於定義變數,變數的型別根據值來確定.
var a = 5; 因為5是int型別,所以a的型別也是int
var stu = new student();因為通過new建立的是student型別的變數,所以stu是student型別.
注意1:var b;這種寫法是錯誤的.原因是由var宣告的變數,必須在定義的同時就賦初值.
注意2:通過var宣告的變數一旦例項化後,就不能再更改它的資料型別.例如下面的**:
var a = 5; a = 「zhangsan」;//a=」zhangsan」報錯
匿名型別
在例項化乙個類物件時,可以無須事先定義該類,通過new{}即可動態建立類物件.
擴充套件方法
擴充套件方法是指:為以前定義好的類擴充套件其他方法.具體步驟如下:
7. 首先,定義乙個靜態類(類的名稱沒有限制)
8. 其次,在靜態類中定義乙個靜態方法(方法返回值根據實際情況自定定義)
9. 最後,給上述靜態方法新增乙個引數,且該引數必須被this關鍵字修飾.
注意: 上面被this關鍵字修飾的引數的型別就是該擴充套件方法所擴充套件的型別
下面的**演示了如何為string類副檔名稱為convert的無參方法.
匿名型別和lambda表示式
什麼是委託:委託允許將乙個方法作為引數,傳遞給另外乙個方法.
下面的**演示了如果使用委託計算2個數字的加法\減法\乘法.
委託和掛載的方法:引數個數\引數型別\引數順序\返回值型別必須要一致
但是上述方式,使用很複雜.我們可以通過匿名方法來簡寫上述功能.=符號右側的就是匿名方法
lambda表示式分3部分 : 引數 | => | 表示式
下面的**演示了如果使用lambda表示式改寫委託的示例.其中3個粉色的線框就是lambda的3部分.
注意1:如果lambda表示式只有1個引數,那麼引數部分可以不用()包裹
注意2:lambda表示式部分可以使用{}包裹,也可以不包裹.如果有多行**,必須要使用{}包裹起來.
在出現委託(func引數)的地方,我們就可以寫lambda表示式.
func是乙個泛型委託.該委託的引數型別為t,返回值型別為k.
lambda表示式的引數arg的型別為t,lambda的表示式部分返回值型別為k.
C 3 0新特性 linq相關
隱含型別區域性變數 var age 26 var username zhuye var userlist new foreach var user in userlist console.writeline user 純粹給懶人用的var關鍵字,告訴編譯器 對於clr來說,它是不會知道你是否使用了v...
LINQ系列 C 中與LINQ相關特性
1.匿名型別 通過關鍵字var定義匿名型別,編譯器將根據運算子右側表示式的值來發出乙個強型別。使用匿名型別時要遵守的一些基本規則 匿名型別必須有乙個初始化值,而且這個值不能是空值 null 因為型別是根據初始化器推斷出來的 匿名型別可以用於簡單型別,也可以用於複雜型別。用於定義簡單型別時,其價值不大...
c 11語言新特性
模板的閉符之間不需要空格 vector 等同於 vector nullptr取代0或者null 以auto完成型別自動推導 一致性初始化與初值列 使用大括號進行初始化動作,如 int values vectorv 初值列如 int j j is initialized by 0 int p q is...