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

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

開(kāi)發(fā) 后端
這里介紹C#調(diào)用擴(kuò)展方法,擴(kuò)展方法和一般靜態(tài)方法的定義方法類似,唯一的區(qū)別是在第一個(gè)參數(shù)的前面要加上關(guān)鍵字this作為修飾符;同時(shí),第一個(gè)參數(shù)的類型也決定了擴(kuò)展方法可以擴(kuò)展的類型。

擴(kuò)展方法是一種特殊的靜態(tài)方法,它定義在一個(gè)靜態(tài)類中,但可以在其他類的對(duì)象上像調(diào)用實(shí)例方法那樣進(jìn)行調(diào)用。因此,通過(guò)擴(kuò)展方法,我們就可以在不修改一個(gè)類型的前提下對(duì)一個(gè)類型進(jìn)行功能上的擴(kuò)充;同時(shí),也可以將一些近似的類型中近似的功能同一實(shí)現(xiàn)在一個(gè)類中,便于閱讀和維護(hù)。

另外,擴(kuò)展方法的引入并非只是簡(jiǎn)單地為了擴(kuò)展現(xiàn)有類型,擴(kuò)展方法的使用還是有一定限制的(這將在稍后談到)。擴(kuò)展方法更大的意義在于它為以后將要介紹的查詢表達(dá)式、查詢表達(dá)式模式和標(biāo)準(zhǔn)查詢運(yùn)算符的實(shí)現(xiàn)奠定了基礎(chǔ),而這些實(shí)現(xiàn)正是Linq項(xiàng)目的核心所在。

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

擴(kuò)展方法和一般靜態(tài)方法的定義方法類似,***的區(qū)別是在***個(gè)參數(shù)的前面要加上關(guān)鍵字this作為修飾符;同時(shí),***個(gè)參數(shù)的類型也決定了擴(kuò)展方法可以擴(kuò)展的類型。

為了介紹擴(kuò)展方法的定義和使用方法,首先我們定義下面這樣一個(gè)簡(jiǎn)單的類作為被擴(kuò)展對(duì)象:

  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. }  

這個(gè)類擁有一個(gè)公共可讀寫(xiě)屬性Val,并有一個(gè)私有域m_val用于存放這個(gè)屬性的值。另外,這個(gè)類自身還擁有一個(gè)公共方法Func,用來(lái)在屏幕上顯示以行信息,說(shuō)明該方法被調(diào)用了。

然后,我們定義一個(gè)靜態(tài)類型SampleExtensions(這個(gè)名字是隨意的,只有將擴(kuò)展方法作為普通的靜態(tài)方法進(jìn)行調(diào)用時(shí)才會(huì)用到這個(gè)名字),其中定義一個(gè)用于擴(kuò)充SampleClass類型的擴(kuò)展方法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. }  

注意這個(gè)方法的***個(gè)參數(shù)(也是僅有的一個(gè)參數(shù))的類型前面多了一個(gè)修飾符this,這表明該方法用來(lái)擴(kuò)展SampleClass類型,也就是說(shuō)可以在SampleClass類型的對(duì)象上像調(diào)用實(shí)例方法那樣調(diào)用ExFunc方法。該方法首先告訴用戶它正在被調(diào)用,然后修改SampleClass類型的對(duì)象的屬性,并調(diào)用它的實(shí)例方法。

接下來(lái),我們?cè)贛ain方法中創(chuàng)建SampleClass類型的一個(gè)實(shí)例,并嘗試調(diào)用其實(shí)例方法和上面定義的擴(kuò)展方法:

  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(); 

當(dāng)然,由于擴(kuò)展方法只是靜態(tài)方法的一種特例,我們同樣可以像用調(diào)用一般靜態(tài)方法那樣來(lái)C#調(diào)用擴(kuò)展方法。

這會(huì)得到完全一樣的結(jié)果。而且事實(shí)上,編譯器也正是將C#調(diào)用擴(kuò)展方法翻譯為了一般形式的靜態(tài)方法調(diào)用,然后才進(jìn)行進(jìn)一步的編譯。

擴(kuò)展方法不僅能擴(kuò)展同一個(gè)程序集中的類型,同時(shí)也能擴(kuò)展不同程序集甚至是已經(jīng)發(fā)布了的程序集中的類型。下面我們就在SampleExtensions中再添加一個(gè)擴(kuò)展方法,用來(lái)擴(kuò)展.net Framework的內(nèi)建類型String(這個(gè)例子摘錄自C# 3.0語(yǔ)言規(guī)范,版權(quán)歸微軟公司所有。)

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

簡(jiǎn)單地瀏覽一下.NET Framework的文檔就會(huì)發(fā)現(xiàn),System.String類型中的確沒(méi)有定義ToInt32方法,這說(shuō)明我們的擴(kuò)展方法在.NET Framework內(nèi)建類型上仍然有效。

【編輯推薦】

  1. C# System.Xml集合
  2. C#實(shí)現(xiàn)Strategy接口
  3. C#編寫(xiě)操作TreeView組件剖析
  4. C#實(shí)現(xiàn)IDisposable接口淺析
  5. C#異常處理詳細(xì)剖析
責(zé)任編輯:佚名 來(lái)源: 百度空間
相關(guān)推薦

2009-08-10 17:36:17

C#擴(kuò)展方法

2009-08-27 18:04:01

c#擴(kuò)展方法string

2009-08-27 17:51:34

C#匿名方法

2009-04-03 13:20:05

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

2009-09-09 14:04:18

C# XML解析XML解析方法

2009-08-31 16:33:28

C#調(diào)用Dispose

2009-08-31 18:05:14

C#調(diào)用WalkTre

2009-08-31 14:45:10

C#擴(kuò)展方法

2009-08-27 16:24:48

擴(kuò)展方法C# 3.0新特性

2009-08-26 15:53:48

C#擴(kuò)展方法

2009-08-18 14:14:45

C#擴(kuò)展方法性能測(cè)試

2009-08-27 09:27:49

C#擴(kuò)展方法

2009-09-10 17:37:01

C# get post

2009-08-03 12:57:27

C#調(diào)用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#調(diào)用析構(gòu)方法

2009-08-05 09:40:02

C#調(diào)用DLL函數(shù)

2009-08-26 16:58:12

調(diào)用C# Thread
點(diǎn)贊
收藏

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