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

C#調用擴展方法剖析

開發 后端
這里介紹C#調用擴展方法,擴展方法和一般靜態方法的定義方法類似,唯一的區別是在第一個參數的前面要加上關鍵字this作為修飾符;同時,第一個參數的類型也決定了擴展方法可以擴展的類型。

擴展方法是一種特殊的靜態方法,它定義在一個靜態類中,但可以在其他類的對象上像調用實例方法那樣進行調用。因此,通過擴展方法,我們就可以在不修改一個類型的前提下對一個類型進行功能上的擴充;同時,也可以將一些近似的類型中近似的功能同一實現在一個類中,便于閱讀和維護。

另外,擴展方法的引入并非只是簡單地為了擴展現有類型,擴展方法的使用還是有一定限制的(這將在稍后談到)。擴展方法更大的意義在于它為以后將要介紹的查詢表達式、查詢表達式模式和標準查詢運算符的實現奠定了基礎,而這些實現正是Linq項目的核心所在。

C#調用擴展方法

擴展方法和一般靜態方法的定義方法類似,***的區別是在***個參數的前面要加上關鍵字this作為修飾符;同時,***個參數的類型也決定了擴展方法可以擴展的類型。

為了介紹擴展方法的定義和使用方法,首先我們定義下面這樣一個簡單的類作為被擴展對象:

  1. class SampleClass  
  2. {  
  3. int m_val = 10;  
  4.  
  5. public int Val { get { return m_val; } set { m_val = value; } }  
  6.  
  7. public void Func()  
  8. {  
  9. Console.WriteLine("Hey! I’m myself, and my value is {0}.", m_val);  
  10. }  

這個類擁有一個公共可讀寫屬性Val,并有一個私有域m_val用于存放這個屬性的值。另外,這個類自身還擁有一個公共方法Func,用來在屏幕上顯示以行信息,說明該方法被調用了。

然后,我們定義一個靜態類型SampleExtensions(這個名字是隨意的,只有將擴展方法作為普通的靜態方法進行調用時才會用到這個名字),其中定義一個用于擴充SampleClass類型的擴展方法ExFunc:

  1. static class SampleExtensions  
  2. {  
  3. public static void ExFunc(this SampleClass s)  
  4. {  
  5. Console.WriteLine("Aha! I’m going to modify the SampleClass!");  
  6. s.Val = 20;  
  7. s.Func();  
  8. }  

注意這個方法的***個參數(也是僅有的一個參數)的類型前面多了一個修飾符this,這表明該方法用來擴展SampleClass類型,也就是說可以在SampleClass類型的對象上像調用實例方法那樣調用ExFunc方法。該方法首先告訴用戶它正在被調用,然后修改SampleClass類型的對象的屬性,并調用它的實例方法。

接下來,我們在Main方法中創建SampleClass類型的一個實例,并嘗試調用其實例方法和上面定義的擴展方法:

  1. SampleClass s = new SampleClass();  
  2.  
  3. Console.WriteLine("Calling the instance method:");  
  4. s.Func();  
  5. Console.WriteLine();  
  6.  
  7. Console.WriteLine("Calling the extension method:");  
  8. s.ExFunc(); 

當然,由于擴展方法只是靜態方法的一種特例,我們同樣可以像用調用一般靜態方法那樣來C#調用擴展方法。

這會得到完全一樣的結果。而且事實上,編譯器也正是將C#調用擴展方法翻譯為了一般形式的靜態方法調用,然后才進行進一步的編譯。

擴展方法不僅能擴展同一個程序集中的類型,同時也能擴展不同程序集甚至是已經發布了的程序集中的類型。下面我們就在SampleExtensions中再添加一個擴展方法,用來擴展.net Framework的內建類型String(這個例子摘錄自C# 3.0語言規范,版權歸微軟公司所有。)

  1. public static int ToInt32(this string s)  
  2. {  
  3. return Int32.Parse(s);  
  4. }  
  5.  
  6. //然后,我們就可以象下面這樣方便地將一個字符串轉換為一個整型了:  
  7.  
  8. string sval = "20";  
  9. Console.WriteLine("String ’20’ means integer: {0}.", sval.ToInt32());  
  10.  
  11. //嘗試運行這段代碼,會得到如下結果:  
  12.  
  13. String ’20’ means integer: 20. 

簡單地瀏覽一下.NET Framework的文檔就會發現,System.String類型中的確沒有定義ToInt32方法,這說明我們的擴展方法在.NET Framework內建類型上仍然有效。

【編輯推薦】

  1. C# System.Xml集合
  2. C#實現Strategy接口
  3. C#編寫操作TreeView組件剖析
  4. C#實現IDisposable接口淺析
  5. C#異常處理詳細剖析
責任編輯:佚名 來源: 百度空間
相關推薦

2009-08-10 17:36:17

C#擴展方法

2009-08-27 18:04:01

c#擴展方法string

2009-08-27 17:51:34

C#匿名方法

2009-04-03 13:20:05

C#擴展方法調用

2009-09-09 14:04:18

C# XML解析XML解析方法

2009-08-31 16:33:28

C#調用Dispose

2009-08-31 18:05:14

C#調用WalkTre

2009-08-31 14:45:10

C#擴展方法

2009-08-27 16:24:48

擴展方法C# 3.0新特性

2009-08-26 15:53:48

C#擴展方法

2009-08-18 14:14:45

C#擴展方法性能測試

2009-08-27 09:27:49

C#擴展方法

2009-09-10 17:37:01

C# get post

2009-08-03 12:57:27

C#調用DLL

2009-08-27 17:14:36

C# Socket

2009-09-07 14:29:52

C# ServiceC

2009-09-01 16:29:03

QuickSort C

2009-09-02 10:49:46

C#調用析構方法

2009-08-05 09:40:02

C#調用DLL函數

2009-08-26 16:58:12

調用C# Thread
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区久久久 | 国产美女永久免费无遮挡 | 国产一伦一伦一伦 | 精品久久久久久久人人人人传媒 | 国产精品亚洲精品久久 | 成人福利电影 | 91精品国产综合久久久久久丝袜 | 日韩一区中文字幕 | 欧美视频精品 | pacopacomama在线 | 欧洲成人午夜免费大片 | 午夜99| 国产精品久久久久久久久久尿 | 黄色片免费在线观看 | 国产精品18hdxxxⅹ在线 | av av在线 | 亚洲aⅴ | 97国产成人 | 欧美1区2区 | 久久精品小视频 | 国产在线高清 | 久久精品97 | 日本久草 | 午夜一区二区三区在线观看 | 综合激情av | 亚洲精品一区二区 | 久久一区二区三区四区 | 午夜视频导航 | 久久久www成人免费无遮挡大片 | 国产真实精品久久二三区 | 久久精品com| 精品福利视频一区二区三区 | 日韩欧美三级 | 亚洲第一天堂无码专区 | 久久久久国产精品一区二区 | 欧美一级特黄aaa大片在线观看 | 99久久久国产精品免费消防器 | 久久精品国产99国产精品 | 国产精品无码久久久久 | 福利精品 | 色av一区二区三区 |