偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C#擴(kuò)展方法學(xué)習(xí)經(jīng)驗(yàn)

開發(fā) 后端
這里介紹C#擴(kuò)展方法不僅能夠應(yīng)用到個(gè)別類型上,也能應(yīng)用到.NET框架中任何基類或接口上。即可用于整個(gè).NET框架豐富的可組合的框架層擴(kuò)展。

C#新語言特性有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#擴(kuò)展方法,包括介紹通過using namespace來導(dǎo)入其它命名空間中的擴(kuò)展方法等方面。

C#擴(kuò)展方法(Extension Methods)

往往我們需要對(duì)CLR類型進(jìn)行一些操作,但苦于無法擴(kuò)展CLR類型的方法,只能創(chuàng)建一些helper方法,或者繼承類。我們來修改上面的User類:

  1. public class User  
  2. {  
  3. public int Id { get; set; }  
  4. public string Name { get; set; }  
  5. public int Age { get; set; }  
  6. public string Read()  
  7. {  
  8. return "Id:" + Id + "姓名:" + Name + "年齡:" + Age;  
  9. }  

然后調(diào)用

  1. var user = new { Id = 1Name = "YJingLee"Age = 22 };  
  2. var str = user.Read(); 

現(xiàn)在有了擴(kuò)展方法就方便多了。

擴(kuò)展方法允許開發(fā)人員往一個(gè)現(xiàn)有的CLR類型的公開契約(contract)中添加新的方法,而不用生成子類或者重新編譯原來的類型。擴(kuò)展方法有助于把今天動(dòng)態(tài)語言中流行的對(duì)duck typing的支持之靈活性,與強(qiáng)類型語言之性能和編譯時(shí)驗(yàn)證融合起來?!肧cott博文

擴(kuò)展方法是可以通過使用實(shí)例方法語法調(diào)用的靜態(tài)方法。效果上,使得附加的方法擴(kuò)展已存在類型和構(gòu)造類型成為可能。他可以對(duì)現(xiàn)有類功能進(jìn)行擴(kuò)充,從而使該類型的實(shí)例具有更多的方法(功能)。
擴(kuò)展方法允許我們在不改變源代碼的情況下擴(kuò)展(即添加不能修改)現(xiàn)有類型中的實(shí)例方法。

擴(kuò)展方法給我們一個(gè)怎樣的思路呢?我們一步一步做一下!
首先聲明擴(kuò)展方法:通過指定關(guān)鍵字this修飾方法的第一個(gè)參數(shù)。注意擴(kuò)展方法僅可聲明在靜態(tài)類中。擴(kuò)展方法具備所有常規(guī)靜態(tài)方法的所有能力,可以使用實(shí)例方法語法來調(diào)用。接著就可以調(diào)用擴(kuò)展方法了。下面通過一個(gè)具體的實(shí)例分析一下:
例如我們要檢查一個(gè)字符串變量是否是合法的電子郵件地址?在.Net2.0框架下像這樣:

  1. var email = "leeyongjing@gmail.com";  
  2. if (EmailValidator.IsValid(email))  
  3. {  
  4. Response.Write("YJingLee提示:這是一個(gè)正確的郵件地址");  

而使用C#擴(kuò)展方法的話,我可以添加“IsValidEmailAddress()”方法到string類本身中去,該方法返回當(dāng)前字符串實(shí)例是否是個(gè)合法的字符串。

  1. if (email.IsValidEmailAddress())  
  2. {  
  3. Response.Write("YJingLee提示:這是一個(gè)正確的郵件地址");  

我們是怎么把這個(gè)IsValidEmailAddress()方法添加到現(xiàn)有的string類里去的呢?先定義一個(gè)靜態(tài)類,再定義“IsValidEmailAddress”這個(gè)靜態(tài)的法來實(shí)現(xiàn)的。

  1. public static class Extensions//靜態(tài)類  
  2. {  
  3. public static bool IsValidEmailAddress(this string s)  
  4. //靜態(tài)方法和this  
  5. {  
  6. Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");  
  7. return regex.IsMatch(s);  
  8. }  

注意,上面的靜態(tài)方法在第一個(gè)類型是string的參數(shù)變量前有個(gè)“this”關(guān)鍵詞,這告訴編譯器,這個(gè)特定的擴(kuò)展方法應(yīng)該添加到類型為“string”的對(duì)象中去。然后在IsValidEmailAddress()方法實(shí)現(xiàn)里,我可以訪問調(diào)用該方法的實(shí)際string實(shí)例的所有公開屬性/方法/事件,取決于它是否是合法電子郵件地址來返回true/false。

C#擴(kuò)展方法不僅能夠應(yīng)用到個(gè)別類型上,也能應(yīng)用到.NET框架中任何基類或接口上。即可用于整個(gè).NET框架豐富的可組合的框架層擴(kuò)展。
擴(kuò)展方法要點(diǎn)

1. 擴(kuò)展方法的本質(zhì)為將實(shí)例方法調(diào)用在編譯期改變?yōu)殪o態(tài)類中的靜態(tài)方法調(diào)用。事實(shí)上,它確實(shí)擁有靜態(tài)方法所具有的所有功能。

2. 擴(kuò)展方法的作用域是整個(gè)namespace可見的,并且可以通過using namespace來導(dǎo)入其它命名空間中的擴(kuò)展方法。

3. 擴(kuò)展方法的優(yōu)先級(jí):現(xiàn)有實(shí)例方法優(yōu)先級(jí)最高,其次為最近的namespace下的靜態(tài)類的靜態(tài)方法,最后為較遠(yuǎn)的namespace下的靜態(tài)類的靜態(tài)方法。

4. 擴(kuò)展方法是一種編譯時(shí)技術(shù),注意與反射等運(yùn)行時(shí)技術(shù)進(jìn)行區(qū)別,并慎重使用。

【編輯推薦】

  1. C# const常量詳細(xì)介紹
  2. C# Lambda表達(dá)式學(xué)習(xí)筆記
  3. C#隱式類型局部變量經(jīng)驗(yàn)總結(jié)
  4. 調(diào)用C# Thread.Start()方法
  5. C# CheckStatus()方法
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-31 16:51:11

C# Main()方法

2009-08-21 18:01:32

C#匿名方法

2009-08-14 17:38:08

C#改寫方法

2009-08-12 17:32:44

C#反射方法

2009-08-10 17:36:17

C#擴(kuò)展方法

2009-08-27 18:04:01

c#擴(kuò)展方法string

2009-08-14 09:41:03

C#遺傳算法

2009-08-13 18:13:27

C#學(xué)習(xí)經(jīng)驗(yàn)

2009-08-19 16:36:29

C#管道技術(shù)

2009-08-19 10:25:18

C#托管資源

2009-08-31 15:48:02

C# Singleto

2009-08-26 17:24:49

C# Mutex對(duì)象

2009-08-27 14:44:11

C# interfac

2009-08-20 15:33:03

C#跳躍語句

2009-08-25 16:14:06

C#使用ADOX

2009-09-01 11:04:59

C#調(diào)用擴(kuò)展方法

2009-09-10 13:54:27

LINQ語法

2009-08-31 14:45:10

C#擴(kuò)展方法

2009-08-24 17:06:37

C#字符串

2009-08-28 16:43:57

C#多線程學(xué)習(xí)
點(diǎn)贊
收藏

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