自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#擴展方法學習經(jīng)驗

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

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

C#擴展方法(Extension Methods)

往往我們需要對CLR類型進行一些操作,但苦于無法擴展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)在有了擴展方法就方便多了。

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

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

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

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

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

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

我們是怎么把這個IsValidEmailAddress()方法添加到現(xiàn)有的string類里去的呢?先定義一個靜態(tài)類,再定義“IsValidEmailAddress”這個靜態(tài)的法來實現(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)方法在第一個類型是string的參數(shù)變量前有個“this”關(guān)鍵詞,這告訴編譯器,這個特定的擴展方法應該添加到類型為“string”的對象中去。然后在IsValidEmailAddress()方法實現(xiàn)里,我可以訪問調(diào)用該方法的實際string實例的所有公開屬性/方法/事件,取決于它是否是合法電子郵件地址來返回true/false。

C#擴展方法不僅能夠應用到個別類型上,也能應用到.NET框架中任何基類或接口上。即可用于整個.NET框架豐富的可組合的框架層擴展。
擴展方法要點

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

2. 擴展方法的作用域是整個namespace可見的,并且可以通過using namespace來導入其它命名空間中的擴展方法。

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

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

【編輯推薦】

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

2009-08-31 16:51:11

C# Main()方法

2009-08-12 17:32:44

C#反射方法

2009-08-21 18:01:32

C#匿名方法

2009-08-14 17:38:08

C#改寫方法

2009-08-10 17:36:17

C#擴展方法

2009-08-27 18:04:01

c#擴展方法string

2009-08-14 09:41:03

C#遺傳算法

2009-08-27 14:44:11

C# interfac

2009-08-26 17:24:49

C# Mutex對象

2009-08-31 15:48:02

C# Singleto

2009-08-20 15:33:03

C#跳躍語句

2009-08-25 16:14:06

C#使用ADOX

2009-08-13 18:13:27

C#學習經(jīng)驗

2009-08-19 10:25:18

C#托管資源

2009-08-19 16:36:29

C#管道技術(shù)

2009-09-01 11:04:59

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

2009-08-31 14:45:10

C#擴展方法

2009-09-10 13:54:27

LINQ語法

2009-08-28 12:25:58

C#靜態(tài)方法

2009-08-11 14:20:41

C# .NET學習經(jīng)驗
點贊
收藏

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