成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#3.5新特性的介紹

開發(fā) 后端
本文介紹了C# net3.5的新特性,供大家參考。

話說.net 4.0都出來了,連.net 3.5都還沒熟悉,是不是有點(diǎn)落伍阿? 恩 我也這么覺得。為了跟上人類進(jìn)步的步伐。 今天花了些時(shí)間了解了下c#3.5新特性。我認(rèn)為大致有下面幾點(diǎn)新東西:

1、var 關(guān)鍵字

2、自動(dòng)屬性(Automatic property)

3、匿名類

4、擴(kuò)展方法

當(dāng)然,話說回來,所有這些c#3.5新特性都是編譯器給我們玩的小把戲,也就是人們常說的“語法糖”。在IL級別沒有任何變化。

在js中定義變量使用var關(guān)鍵字,可以使用var來定義一個(gè)變量,保存任何一種類型的值,但是在C#中只能在聲明的時(shí)候賦值如:var v = "123";并且只能用作局部變量。不能聲明一個(gè)var類型的field,或通過方法傳遞一個(gè)var類型的參數(shù)等。

自動(dòng)屬性還是有點(diǎn)意思,可以減輕一些工作量:

  1. public string Name  
  2. {  
  3.     get;  
  4.     set;  

是不是有點(diǎn)眼熟呢?呵呵, 不要和抽象屬性搞混了,

  1. public abstract string Name  
  2. {  
  3.     get;  
  4.     set;  

C#編譯器認(rèn)得到。利用自動(dòng)屬性,就可以免得定義使用私有成員了,事實(shí)上就像我上面說的那樣:都是“語法糖” ,在編譯成IL的過程中,編譯器已經(jīng)自動(dòng)為你聲明了一個(gè)私有成員。那你或許又有疑問了:自動(dòng)生成的私有成員會不會和你已經(jīng)有的成員相沖突呢? 恩, 有道理。因?yàn)榇蠹叶加羞@樣的經(jīng)歷:聲明了一個(gè)名稱為Name的Property就不能聲明一個(gè)get_Name的方法了,因?yàn)樵贗L中屬性是通過方法來實(shí)現(xiàn)的。但是現(xiàn)在請放心:自動(dòng)生成的成員永遠(yuǎn)不會和你自己的類成員相沖突。

來看下

  1. public string Name  
  2.       {  
  3.           get;  
  4.           set;  
  5.       } 

生成的IL代碼:

  1. .method public hidebysig specialname instance string   
  2.         get_Name() cil managed  
  3. {  
  4.   .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )   
  5.   // Code size       11 (0xb)  
  6.   .maxstack  1  
  7.   .locals init (string V_0)  
  8.   IL_0000:  ldarg.0  
  9.   IL_0001:  ldfld      string DotNewFeature.TestAutoProperty::'< Name>k__BackingField' 
  10.   IL_0006:  stloc.0  
  11.   IL_0007:  br.s       IL_0009  
  12.   IL_0009:  ldloc.0  
  13.   IL_000a:  ret  
  14. // end of method TestAutoProperty::get_Name  
  15.  
  16.  
  17. .method public hidebysig specialname instance void   
  18.         set_Name(string 'value') cil managed  
  19. {  
  20.   .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )   
  21.   // Code size       8 (0x8)  
  22.   .maxstack  8  
  23.   IL_0000:  ldarg.0  
  24.   IL_0001:  ldarg.1  
  25.   IL_0002:  stfld      string DotNewFeature.TestAutoProperty::'< Name>k__BackingField' 
  26.   IL_0007:  ret  
  27. // end of method TestAutoProperty::set_Name  
  28. .field private string '< Name>k__BackingField' 

其中g(shù)et_Name和set_Name和以前的屬性是一樣的,不過編譯器自動(dòng)生成了一個(gè) 類似< XXXX>k__BackingField的成員,因?yàn)榘珻#中變量不允許的符號(“< ”,">"),所以在使用的時(shí)候還是大可放心的。

那用自動(dòng)屬性和用pulic成員又有啥區(qū)別呢?這倒也是,property 好就好在取數(shù)和賦值的時(shí)候可以執(zhí)行一些額外的邏輯。而自動(dòng)屬性有沒有這些功能。我能想到的有兩個(gè)原因要使用自動(dòng)property而不是public field

(1)代碼一致性,現(xiàn)在在代碼里面基本上看不到使用public field的了

(2)在.Net 中有些地方還只支持property 而不支持public field. 難道不是嗎?

當(dāng)然了,在編寫web頁面或者web控件的時(shí)候最好就不用自動(dòng)屬性了,原因就不用我說了。

匿名類的聲明方式如下:

  1. var v = new {name="Ben",age = 5};  
  2. string a = v.name; 

編譯的時(shí)候生成一個(gè)范型類,然后調(diào)用此范型類的構(gòu)造函數(shù)。具體的就不多說了

至于 擴(kuò)展方法,他可以給你一種能力,能動(dòng)態(tài)的擴(kuò)展一個(gè)類型的方法。就像js 一樣:

  1. Array.prototype.IndexOf = function(index){//....} 

通過擴(kuò)展方法 你可在String類中添加你自己的方法 如:OfMyName()

實(shí)現(xiàn)方法如下:

  1. namespace MyNameSpace  
  2. {  
  3.     public static class TestStaticMethod  
  4.     {  
  5.         public static string OfMyName(this string s)  
  6.         {  
  7.             return s + "Ben";  
  8.         }  
  9.     }  
  10. }  

然后在MyNameSpace這個(gè)名字空間內(nèi)都可以這樣使用了:

  1. String a ="Hello ";  
  2. String b =a. OfMyName(); 

當(dāng)然在IL中還是調(diào)用TestStaticMethod.OfMyName的。所以還是編譯器耍的障眼法。不過不要真的被迷惑了,請看下面的代碼:

  1. namespace MyNameSpace  
  2. {  
  3.     public static class TestStaticMethod  
  4.     {  
  5.         public static string OfMyName(this string s)  
  6.         {  
  7.             return s + "Ben";  
  8.         }  
  9.     }  
  10.       //新加的一個(gè)靜態(tài)類,其中也包含OfMyName方法  
  11.       public static class TestStaticMethod_2  
  12.     {  
  13.         public static string OfMyName(this string s)  
  14.         {  
  15.             return s + "Benjamin";  
  16.         }  
  17.     }  

然后調(diào)用:

String a ="Hello ";

String b =a. OfMyName();

結(jié)果會增么樣呢?

編譯失?。。。?因?yàn)樵?IL中還是把a(bǔ). OfMyName()映射到具體的類中的方法,而現(xiàn)在不知道要去調(diào)用TestStaticMethod.OfMyName 還是TestStaticMethod_2.OfMyName。

C#3.5新特性就給大家介紹到這里了。

【編輯推薦】

  1. C# winForm自定義鼠標(biāo)樣式的兩種方法
  2. C#自定義消息框的設(shè)置圖解
  3. 掌握C#自定義泛型類:從初始化說起
  4. C#存儲過程的循序漸進(jìn)
  5. 存儲過程的優(yōu)勢及其調(diào)用方法介紹
責(zé)任編輯:book05 來源: cnblogs
相關(guān)推薦

2009-08-12 13:15:44

C#3.5新特性

2009-08-26 17:10:09

C# 3.5新特性

2009-06-15 09:35:48

Eclipse 3.5

2009-06-16 14:27:00

Eclipse 3.5

2009-08-19 16:51:14

C# 4.0 dyna

2009-08-24 17:55:44

C#3.0新特性

2021-04-30 19:53:41

Java表達(dá)式代碼

2012-03-14 12:29:55

JavaPlay Framwo

2009-08-28 08:46:15

Windows 7防火墻

2025-05-15 08:10:00

Vue 3.5Vue

2009-08-04 08:48:44

C#內(nèi)置特性

2011-07-06 16:38:57

Xcode Preview

2021-03-06 08:10:16

Redis6 Java架構(gòu)分布式框架

2009-03-24 11:54:12

2017-01-09 16:25:55

Android Shortcuts系統(tǒng)

2009-08-24 18:01:45

C#3.0新特性

2009-08-31 14:45:07

Visual C# 3

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美精品久久久久久久久老牛影院 | 永久看片 | 国产精品免费av | 日韩中文字幕久久 | 中文字幕国产视频 | 天天综合天天 | 五月天激情综合网 | 中文字幕av免费 | 欧美精品一区三区 | 午夜影院| 国产精品伦一区二区三级视频 | 在线看亚洲 | 欧美成人精品 | 亚洲天堂中文字幕 | 国产亚洲一区二区三区在线 | 久久激情av | 国内精品久久久久 | 国产成人免费网站 | 91久久精品国产91久久 | 久久国产精品色av免费观看 | 天堂三级 | 亚洲五码在线 | 欧美性影院 | 91亚洲国产成人久久精品网站 | 天天干成人网 | 成人在线一级片 | 欧美一区免费 | 这里精品 | 91视频在线看 | 欧美1区| 精品久久久久久亚洲综合网 | 国外成人在线视频 | 欧美一区二区三区在线观看 | www.伊人.com | aaaaaa大片免费看最大的 | 久久久日韩精品一区二区三区 | 激情a | 欧美另类视频在线 | 中文字幕av在线一二三区 | 国产精品久久精品 | 亚洲国产一区视频 |