C#3.0 新特性學習筆記(4):擴充方法

來源:互聯網
上載者:User

擴充方法。

     相信大家都已經聽說過或已經用過這個新特性,這個也是我所喜歡的新特性之一.

     當我們需要對已有類的功能進行擴充時,我們通常會想到繼承,繼承已有類,然後為其加入新的行為。而C# 3.0中加入的擴充方法特性,則提供了另一種實現功能擴充的方式,我們可以在不使用繼承的前提下實現對已有類本身的擴充,這種方法並不會產生新的類型,而是採用向已有類中加入新方法的方式來完成功能擴充。

  在對已有類進行擴充時,我們需將所有擴充方法都寫在一個靜態類中,這個靜態類就相當於存放擴充方法的容器,所有的擴充方法都可以寫在這裡面。而且擴充方法採用一種全新的聲明方式:

      public static 傳回型別 擴充方法名(this 要擴充的類型 sourceObj [,擴充方法參數列表])    

與普通方法聲明方式不同,擴充方法的第一個參數以this關鍵字開始,後跟被擴充的類型名,然後才是真正的參數列表。下面是使用樣本:

 

 namespace JackDong.CSharp3Feature
 {
   public static class MethodExtend
   {
      public static bool OutLength(this string str){
                if(str.Length>10)return true;
                return false;
         }
     }
 }

 

如果你想調用這個函數可以在你所有調用的類中引入所在的命名空間(using JackDong.CSharp3Feature;)

然後就可以在自己的方法中調用這個方法:string.OutLength(yourstring);

是不是很神奇。

大家都知道Object是所有類的始祖,如果擴充Object的方法會怎麼樣呢?在所有類中都能調用你所擴充的方法,在這裡就不在贅述,不信你可以試一下.

另例:

 

namespace JackDong.CSharp3Feature
{
static class Extensions
{
 public static int ToInt32(this string source)
 {
  return Int32.Parse(source);
 }

 public static T[] Slice<T>(this T[] source, int index, int count)
 {
  if (index < 0 || count < 0 || index + count > source.Length)
  {
   throw new ArgumentException();
  }

  T[] result = new T[count];
  Array.Copy(source, index, result, 0, count);    
  return result;
 }
}

class ExtensionMethods : AppRunner.AbstractApplication
{
 public override void Run()
 {
  string number = "123";
  Console.WriteLine(number.ToInt32());
  
  int[] intArray = new int[] { 1, 2, 3 };
  
  intArray = intArray.Slice(1, 2);
  
  foreach (var i in intArray)
   Console.WriteLine(i);
 }
}
}

 

 在上面的樣本中,靜態Extensions類中有兩個擴充方法,第一個方法是對string類的擴充,它為string類加入了名為ToInt32的方法,該方法沒有參數,並返回一個int類型的值,它將完成數字字元向整數的轉換。有了這個擴充方法之後,就可對任意string類的對象調用ToInt32方法了,該方法就像其本身定義的一樣。

  第二個擴充方法是一個泛型方法,它是對所有數群組類型的擴充,該方法完成數組的切片操作。

      C# 3.0中的Linq運算式,就是大量運用擴充方法來實現資料查詢的。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.