.NET 擴充方法解密

來源:互聯網
上載者:User

今天我們接著看一下.NET 3.x的新特性:擴充方法。這裡需要說明的是我所說的.NET 3.x的新特性,其實是C# 3.0的一些新特性,考慮到LinQ等我就把這些特性叫做.NET 3.x新特性。可能這樣叫會有些歧義,但是我還是覺的這樣還好,閑話不多說讓我們進入正題。我覺得在C#3.0中引入自動化屬性等就已經減少了我們不少負擔,而擴充方法是我最喜歡的,它提供的可視化提示中顯得更為巧妙。但是我也會覺得有點煩瑣,當一個類的擴充方法太多時,就像有LinQ存在的情況下,會出現一大批的提示方法......

  什麼是擴充方法?他的文法又是怎麼樣的?讓我們來看看。擴充方法必須定義在靜態函數中,擴充的方法也必須是靜態函數。這對於一些方法類的擴充提供了良好的支援,特別是對介面的補充更是極品啊,通常我們在用DataReader取對象時都需要一個轉換,而通過dr(DataReader執行個體)的一些方法如:GetString(int),GetInt32(ing)...其中的參數都是列的索引,通常我們都需要填寫列的名稱,這樣我們就可以對IDataReader介面進行擴充:

1. interface definition:  

namespace AttributeSpace
{
   public interface IInterfaceDemo
   {

         public void show();
   }
}

2.Extension class definition:

namespace AttributeSpace
{

 public static class MyExtension
 {

  public static bool IsMatchEmail(this string s)
  {

 

    public static string DecorateText( this IInterfaceDemo objInterface ,string text)
    {

     text = text + " decoration!";
     return text;

    }

 }

}

 

3. class that implement  the interface

namespace AttributeSpace
{
 public class ClassForInterface : IInterfaceDemo
 {

 }
}

 

4. test the extension method:

namespace AttributeSpace
{
 class Program
 {
  static void Main(string[] args)
  {

   ClassForInterface inter = new ClassForInterface();
   string text = inter.DecorateText("廖常煌");
   Console.WriteLine("my new name is {0}", text);
   Console.Read();
  }
 }
}

  從上面我們也可以知道他的文法,首先要有一個靜態類MyExtensions,對IInterfaceDemo介面的擴充,需要加入this IInterfaceDemo,而參數就是列名text。下面我們來看看他在VS中是怎麼智能提示的呢?

  在上面我們可以看到在inter對象中出現了上面擴充的提示(extension),原來IInterfaceDemo內建的只有一個show()方法,現在看到了另外一個方法DecorateText,這樣是不是感覺上好一點?注意:如果你要用此擴充必須引入所在的命名空間。

  在擴充方法中有一種繼承作用,如果當你在父擴充方法類(如上面的IInterfaceDemo)上添加擴充方法後,則他的子類也同樣具有此擴充。如果我們想在所有類中都有的方法我們就可以對Object進行擴充,那樣在所有類中都會具有此擴充的方法,只要你引用了他所做的空間。例如:我們如果要判斷當前執行個體是否為集合或列表中的一個項,我們就可以對Object進行擴充,代碼如下:

  我們可以在所有的對象中得到此擴充,可以參考:

  我們知道其實整個LinQ都是方法的擴充,這個我們把它留到以後研究他時再說,因為LinQ有三大部分,一個是相對於類的,一個是To SQL的,還有一個是To XML的。當年都把他們叫做LinQ,DLinQ,XLinQ現在好像沒有這麼個教法,我們就順從微軟的意願吧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.