欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#語(yǔ)法糖(Csharp Syntactic sugar)大匯總

 更新時(shí)間:2010年06月09日 19:04:06   作者:  
首先需要聲明的是“語(yǔ)法糖”這個(gè)詞絕非貶義詞,它可以給我?guī)?lái)方便,是一種便捷的寫(xiě)法,編譯器會(huì)幫我們做轉(zhuǎn)換;而且可以提高開(kāi)發(fā)編碼的效率,在性能上也不會(huì)帶來(lái)?yè)p失。這讓java開(kāi)發(fā)人員羨慕不已,呵呵。

1. 經(jīng)過(guò)簡(jiǎn)化的Property
早些時(shí)候我們這樣聲明Property

復(fù)制代碼 代碼如下:

private string _myName;
public string MyName
{
get { return _myName; }
set { _myName = value; }
}

千篇一律的這樣聲明,沒(méi)有多大意義,于是C#的設(shè)計(jì)人員將這個(gè)千篇一律的工作交給了編譯器幫我們做了,我們現(xiàn)在可以這樣聲明
復(fù)制代碼 代碼如下:

public string MyName { get; set; }

當(dāng)然他不會(huì)犧牲靈活性,我們可以單獨(dú)給get或者set設(shè)定訪(fǎng)問(wèn)限制符,例如
復(fù)制代碼 代碼如下:
public string MyName { get; protected internal set; }

2. 經(jīng)過(guò)兩次變異的委托寫(xiě)法
在.net 1.1時(shí)我們不得不聲明方法后才在委托中使用,在.net 2.0之后我們可以使用匿名委托,他不單可以簡(jiǎn)化寫(xiě)法,還可以在匿名委托中訪(fǎng)問(wèn)范圍內(nèi)的變量;再后來(lái)拉姆達(dá)表達(dá)式來(lái)了,寫(xiě)法就更簡(jiǎn)便了。
復(fù)制代碼 代碼如下:

class MyClass
{
public delegate void DoSomething(int a);
//定義方法委托
private void DoIt(int a) {
Console.WriteLine(a);
}
private void HowtoDo(DoSomething doMethod,int a) {
doMethod(a);
}
public static void Main(string[] args) {
MyClass mc = new MyClass();
//調(diào)用定義的方法委托
mc.HowtoDo(new DoSomething(mc.DoIt), 10);
int x = 10;
//使用匿名委托
mc.HowtoDo(delegate(int a){
Console.WriteLine(a + x);
},10);
//使用lamda表達(dá)式
mc.HowtoDo(a=>Console.WriteLine(a+x),10);
Console.ReadLine();
}
}

3. 集合類(lèi)的聲明
之前我們聲明一個(gè)List并給list賦初始值,必須得這么寫(xiě):
List<string> list = new List<string>();
list.Add("a一");
list.Add("b二");
list.Add("c三");
現(xiàn)在不需要了,直接寫(xiě)就可以了
List<string> list = new List<string> {
"def","OK"
};
4. 集合類(lèi)各個(gè)項(xiàng)的操作
我們?yōu)榱酥饌€(gè)處理集合中的項(xiàng),需要這么寫(xiě):
foreach (string item in list)
{
Console.WriteLine(item);
}
現(xiàn)在不需要了,這樣就可以了
list.ForEach(a => Console.WriteLine(a));
代碼是不是清爽了很多。
5. using == try finally
為了在使用完畢時(shí)釋放資源,我們經(jīng)常要用using,using實(shí)質(zhì)上就是try fiannaly的一個(gè)語(yǔ)法糖而已。例如
StreamWriter sw = null;
try
{
sw = new StreamWriter("d:\abc.txt");
sw.WriteLine("test");
}
finally {
if(sw!= null) sw.Dispose();
}
上面的代碼可以簡(jiǎn)化為:
using (var sw = new StreamWriter("d:\abc.txt")) {
sw.WriteLine("test");
}
6. 可愛(ài)的var
var的意義時(shí)不必寫(xiě)聲明的類(lèi)型,編譯器會(huì)根據(jù)后面對(duì)var的賦值判斷它的類(lèi)型,var的類(lèi)型一旦確認(rèn)就不能再改變,它只能作為局部變量使用,不能用做字段也不能用做參數(shù)聲明。
例如:
var writer = new StreamWriter(path);
for(var i=0;i<100;i++){}
7. 問(wèn)號(hào)的演變
老掉牙的一個(gè)問(wèn)號(hào)+冒號(hào)
var b = 3;
var a = b > 9?b.ToString():"0"+b;
新寶寶兩個(gè)問(wèn)號(hào) ??,它表示左邊的變量如果為null則值為右邊的變量,否則就是左邊的變量值
string a = null;
var b = a??"";
8. 類(lèi)型實(shí)例化的語(yǔ)法糖
public class Abc
{
public int ID { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
我們沒(méi)有為上面的類(lèi)聲明構(gòu)造函數(shù),但是我們可以像下面的形式來(lái)實(shí)例化它
public static void Main(string[] args) {
var abc = new Abc{
ID=1,
Name="jb51",
Url="http://jb51.jb51.net/"
};
}
9. 傳說(shuō)中的擴(kuò)展方法
在c#3.5時(shí)引入了擴(kuò)展方法,我們可以在不修改類(lèi)源碼的情況下給類(lèi)增加實(shí)例方法,這個(gè)很有意義。它的實(shí)質(zhì)也是一種語(yǔ)法糖的實(shí)現(xiàn)
例如我們給String類(lèi)擴(kuò)展一個(gè)IsNumber的方法:
view sourceprint?01 public static class StringExt {
static private Regex regexNumber = new Regex("\\d+");
static public bool IsNumber(this string input)
{
if (string.IsNullOrEmpty(input))
{
return false;
}
return regexNumber.IsMatch(input);
}
}
我們可以在String實(shí)例上調(diào)用這個(gè)方法了
var abc = “123";
var isNumber = abs.IsNumber();
10.使用匿名類(lèi)
復(fù)制代碼 代碼如下:

var a = new {
ID = 1,Name="jb51",BlogUrl="http://www.dbjr.com.cn/jb51/"
};

匿名類(lèi)在linq to sql或者entity framework中返回查詢(xún)數(shù)據(jù)時(shí)很好用。
如果大家還有更多的語(yǔ)法糖,歡迎分享。同時(shí)希望大家享受語(yǔ)法糖,因?yàn)樗梢越o我們帶來(lái)方便,請(qǐng)不要對(duì)它嗤之以鼻,也沒(méi)必要對(duì)它嗤之以鼻。

相關(guān)文章

最新評(píng)論