微軟在visual studio 2015中更新c#語言到6.0,新增了很多很好的特性,以使c#語言繼續躋身於最優秀語言之行列。下面通過乙個例子快速感受一下c# 6.0的新特性,以下程式在vs2015正式版中測試通過。
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading.tasks;67
namespace
csharp6research813
14public
int b = 1;15
16public
string separator = "/"
;1718public
string separatorspaces = string
.empty;
1920
public
double value => (double)a /b;
2122
public
intthis[int index] => index == 0 ?a : b;
2324
public
intthis[string index] => index == "
a" ?a : b;
2526
public
override
string tostring() => $"";
2728
public
void print() =>console.writeline(tostring());
2930
public
fraction()
3134
35public fraction(int a, int
b)36
4041
public fraction(int a, int b, string separatorspaces) : this
(a, b)
4248}49
50public
static
readonly dictionary commonfractions =
51new dictionary52;
5960}61
62public
struct
fractionstruct
6365
public
int b
66public fractionstruct(int a, int b)
6768
public
override
string tostring() => $"/"
;6970}
7172
class
program
73 : ");
79}8081
var fraction = new fraction(1, 3, "");
82fraction.print();
8384
try85
88catch (argumentnullexception e) when (e.paramname == "
separatorspaces")
8992
93fraction v;
94 fraction.commonfractions.trygetvalue("
harf
", out
v);95 v?.print();
96var a = v?.a;
97 console.writeline(a == null
);98
var b = v?["b"
];99 console.writeline(b == null
);100 console.writeline(v?.tostring() == null
);101
102 console.writeline(new fractionstruct(0, 1
).tostring());
103 console.writeline(default
(fractionstruct).tostring());
104}
105106
}107 }
執行結果如下,
zero : 01. auto-property initializers 自動屬性初始化器one : 1
half : 0.5
quarter : 0.25
infinity : ∞
1 / 3
separatorspaces can not be null
true
true
true
0/10/0
public int b = 1;
可以直接給自動屬性賦值了,不需要寫在建構函式中了。
2. getter-only auto-properties 唯讀自動屬性
public string separatorspaces = string.empty;
唯讀自動屬性可以直接初始化,或者在建構函式中初始化。
3. expression-bodied members 表示式體成員
public double value => (double)a / b;
public int this[int index] => index == 0 ? a : b;
public void print() => console.writeline(tostring());
唯讀屬性,唯讀索引器和方法都可以使用lambda表示式作為body。
4. string interpolation 字串嵌入值
$"";
字串前加$,大括號中的表示式會在執行時計算值,並嵌入到字串中。
5. nameof operator nameof 運算子
throw new argumentnullexception(nameof(separatorspaces));
nameof會返回變數,引數或成員名。
這個很有用,原來寫wpf中的viewmodel層的屬性變化通知時,需要寫字串,或者使用mvvmlight等庫中的幫助方法,可以傳入獲取屬性的lambda,但由於是在執行時解析,會有少許效能損失。現在好了,使用nameof運算子,既能保證重構安全和可讀性,又能保證效能。
6. dictionary initializer 字典初始化器
new dictionary< string, fraction>
["zero"] = new fraction (),
["one"] = new fraction (1, 1),
["half"] = new fraction (1, 2),
["quarter"] = new fraction (1, 4),
[ "infinity"] = new fraction (1, 0),
現在字典可以用一種可讀性更好的方法進行初始化,方括號包圍的key等於value。
7. exception filters 異常過濾器
catch (argumentnullexception e) when (e.paramname == "separatorspaces")
console.writeline("separatorspaces can not be null");
設定進入catch塊的條件。
8. null propagation 空傳播
v?.a
v?["b"]
v?.tostring()
物件為null時不呼叫屬性,索引器,方法等,表示式返回null,和swift中的用法相似。
9. await in catch/finally catch和finally塊中的await
例子如下,
resource res = null;
trycatch (resourceexception e)
finally
c 6 0新特性(一)
接近年底了,基本上沒什麼活了,就學點新東西,就想著了解下c 6.0的新特性。在code project上看到了一篇不錯的文章,就準備翻譯一下,順便照著學習學習。廢話不多說,直奔主題。眾所周知,c 6.0 是在visual studio 2015中引入的。在其他的幾個版本中同樣引入一些特性,比如在c ...
c 6 0新特性(一)
接近年底了,基本上沒什麼活了,就學點新東西,就想著了解下c 6.0的新特性。在code project上看到了一篇不錯的文章,就準備翻譯一下,順便照著學習學習。廢話不多說,直奔主題。眾所周知,c 6.0 是在visual studio 2015中引入的。在其他的幾個版本中同樣引入一些特性,比如在c ...
乙個例子理解C 位移
來自 很多人覺得位移這東西很複雜,二進位制一堆0 1看不懂。其實很簡單。位移理解可能簡單一些 其實位移就是資料轉換成二進位制的左右移動 右移左補0,左移右補0,後面多出來的部分去掉。用乘除法去理解位移也可以 左位移 相當於乘 左移1位相當於乘2,左移2位相當於乘4,左移3位相當於乘8,左移4位相當於...