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

C#擴展方法學習經驗

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

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

C#擴展方法(Extension Methods)

往往我們需要對CLR類型進行一些操作,但苦于無法擴展CLR類型的方法,只能創建一些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. }  

然后調用

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

現在有了擴展方法就方便多了。

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

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

擴展方法給我們一個怎樣的思路呢?我們一步一步做一下!
首先聲明擴展方法:通過指定關鍵字this修飾方法的第一個參數。注意擴展方法僅可聲明在靜態類中。擴展方法具備所有常規靜態方法的所有能力,可以使用實例方法語法來調用。接著就可以調用擴展方法了。下面通過一個具體的實例分析一下:
例如我們要檢查一個字符串變量是否是合法的電子郵件地址?在.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()方法添加到現有的string類里去的呢?先定義一個靜態類,再定義“IsValidEmailAddress”這個靜態的法來實現的。

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

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

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

1. 擴展方法的本質為將實例方法調用在編譯期改變為靜態類中的靜態方法調用。事實上,它確實擁有靜態方法所具有的所有功能。

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

3. 擴展方法的優先級:現有實例方法優先級最高,其次為最近的namespace下的靜態類的靜態方法,最后為較遠的namespace下的靜態類的靜態方法。

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

【編輯推薦】

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

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#擴展方法

2009-08-27 18:04:01

c#擴展方法string

2009-08-14 09:41:03

C#遺傳算法

2009-08-31 15:48:02

C# Singleto

2009-08-26 17:24:49

C# Mutex對象

2009-08-27 14:44:11

C# interfac

2009-08-20 15:33:03

C#跳躍語句

2009-08-25 16:14:06

C#使用ADOX

2009-08-13 18:13:27

C#學習經驗

2009-08-19 16:36:29

C#管道技術

2009-08-19 10:25:18

C#托管資源

2009-09-01 11:04:59

C#調用擴展方法

2009-09-10 13:54:27

LINQ語法

2009-08-31 14:45:10

C#擴展方法

2009-08-12 15:55:12

C#接口定義

2009-08-27 13:45:45

C#別名指示符
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩高清一区 | 国产精品18久久久久久白浆动漫 | 日韩在线播放网址 | 欧美成人一区二免费视频软件 | 久久一区视频 | 性生生活大片免费看视频 | 一级免费在线视频 | 99免费 | 亚洲一区二区视频 | 欧美日韩成人 | 欧美一区二区三区视频 | 成人小视频在线 | 91国产在线视频在线 | 欧美精品 在线观看 | 精品无码久久久久久久动漫 | 91精品91久久久 | 日韩视频精品在线 | 国产黑丝在线 | 91麻豆精品国产91久久久更新资源速度超快 | 国产传媒毛片精品视频第一次 | 国产精品伦理一区二区三区 | 日韩在线观看一区 | 亚洲成人激情在线观看 | 欧美激情久久久 | 亚洲视频在线免费观看 | 日韩字幕一区 | 亚洲精品成人在线 | 日韩精品在线观看一区二区三区 | 亚洲精品自拍 | 99视频久| 国产一区免费视频 | 久久国产一区二区 | 亚洲一区 | 毛片一区二区三区 | 日韩在线免费视频 | 国产精品1区 | 国产欧美久久一区二区三区 | www.久草.com | 日韩在线精品强乱中文字幕 | 国产农村妇女精品一区 | 久久国产精品免费 |