歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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#多線程編程實例 線程與窗體交互【附源碼】 http://www.linuxidc.com/Linux/2014-07/104294.htm

C#數學運算表達式解釋器 http://www.linuxidc.com/Linux/2014-07/104289.htm

在C語言中解析JSON配置文件 http://www.linuxidc.com/Linux/2014-05/101822.htm

C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm

Copyright © Linux教程網 All Rights Reserved