成人免费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的支持之靈活性,與強類型語言之性能和編譯時驗證融合起來。——引用Scott博文

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

擴展方法給我們一個怎樣的思路呢?我們一步一步做一下!
首先聲明擴展方法:通過指定關鍵字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-13 18:13:27

C#學習經驗

2009-08-19 16:36:29

C#管道技術

2009-08-19 10:25:18

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-09-01 11:04:59

C#調用擴展方法

2009-09-10 13:54:27

LINQ語法

2009-08-31 14:45:10

C#擴展方法

2009-08-24 17:06:37

C#字符串

2009-08-28 16:43:57

C#多線程學習
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲午夜久久久 | 91亚洲国产成人精品一区二三 | 欧美精品成人一区二区三区四区 | 一区二区三区国产 | 欧美综合一区二区 | 国产免费a视频 | 999免费视频 | 日韩精品一区二区三区视频播放 | 精品国模一区二区三区欧美 | 中文精品视频 | 天天操 天天操 | 成人不卡| 亚洲不卡在线观看 | 国产在线视频一区二区董小宛性色 | 麻豆成人在线视频 | 成人免费一级 | 亚洲一区免费视频 | 日一区二区 | 日韩精品久久久久久 | 一区二区三区免费观看 | 综合网中文字幕 | 午夜免费网站 | 99久久精品免费看国产四区 | 成人免费黄视频 | 亚洲精品欧美 | 精彩视频一区二区三区 | 日韩欧美亚洲 | 中文字幕一区二区在线观看 | 国产一级电影在线 | 日韩午夜一区二区三区 | 在线观看国产 | 久久久精品一区二区三区 | 在线国产欧美 | 91精品国产色综合久久不卡98 | 欧区一欧区二欧区三免费 | 亚洲国产精品va在线看黑人 | 一级黄色夫妻生活 | 在线一区二区三区 | 精品国产乱码久久久久久丨区2区 | 伊人网一区 | 久久久www成人免费精品 |