首頁 > 後端開發 > C#.Net教程 > C#中關於擴展方法的實例分析

C#中關於擴展方法的實例分析

黄舟
發布: 2017-06-18 10:24:17
原創
1254 人瀏覽過

這篇文章主要介紹了C#擴展方法,結合實例形式分析了C#擴展方法的功能、使用方法及相關注意事項,需要的朋友可以參考下

本文實例講述了C#擴展方法。分享給大家供大家參考,具體如下:

擴充方法

擴充功能方法可讓您向現有型別「新增」方法,而無需建立新的派生類型、重新編譯或以其他方式修改原始類型。擴充方法是一種特殊的靜態方法,但可以像擴充類型上的實例方法一樣進行呼叫。對於用 C# 和 Visual Basic 編寫的客戶端程式碼,呼叫擴充方法與呼叫在類型中實際定義的方法之間沒有明顯的差異。

如果我們有這麼一個需求,將一個字串的第一個字元轉換為大寫,第二個字元到第n個字元轉換為小寫,其他的不變,那我們該如何實現呢?

不使用擴充方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
  //抽象出静态StringHelper类
  public static class StringHelper
  {
    //抽象出来的将字符串第一个字符大写,从第一个到第len个小写,其他的不变的方法
    public static string ToPascal(string s,int len)
    {
      return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1);
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "aSDdAdfGDFSf";
      string s2 = "sbfSDffsjG";
      Console.WriteLine(StringHelper.ToPascal(s1,3));
      Console.WriteLine(StringHelper.ToPascal(s2, 5));
    }
  }
}
登入後複製

使用擴充方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "aSDdAdfGDFSf";
      string s2 = "sbfSDffsjG";
      Console.WriteLine(s1.ToPascal(3));
      Console.WriteLine(s2.ToPascal(5));
    }
  }
  //扩展类,只要是静态就可以
  public static class ExtraClass
  {
    //扩展方法--特殊的静态方法--为string类型添加特殊的方法ToPascal
    public static string ToPascal(this string s, int len)
    {
      return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1);
    }
  }
}
登入後複製

透過上面兩種方法的比較:

#    1.程式碼在存取ToPascal這樣的靜態方法時更為便捷。用起來就像是被擴充類型確實具有該實例方法一樣。
    2.擴充方法不會改變被擴充類別的程式碼,不用重新編譯、修改、衍生被擴充類別

定義擴充方法







######## ##    1.定義一個靜態類別以包含擴充方法。 ###    2.該類別必須對客戶端程式碼可見。 ###    3.將此擴充方法實作為靜態方法,並使其至少具有與包含類別相同的可見性。 ###    4.方法的第一個參數指定方法所操作的型別;此參數必須以 this 修飾詞開頭。 ######請注意,第一個參數不是由呼叫程式碼指定的,因為它表示正應用###運算子###的類型,並且編譯器已經知道###物件###的類型。 您只需透過 n 為這兩個形參提供實參。 ############注意事項:############    1.擴充方法必須在靜態類別中定義###    2.擴充方法的###優先級###低於同名的類別方法###    3.擴充方法只在特定的###命名空間###內有效###    4.除非必要濫用擴充方法################

以上是C#中關於擴展方法的實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板