C# 之 擴展方法
來源:程序員人生 發布時間:2014-12-15 08:50:52 閱讀次數:3278次
擴大方法
擴大方法使您能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。擴大方法是1種特殊的靜態方法,但可以像擴大類型上的實例方法1樣進行調用。對用 C# 和 Visual Basic 編寫的客戶端代碼,調用擴大方法與調用在類型中實際定義的方法之間沒有明顯的差異。
如果我們有這么1個需求,將1個字符串的第1個字符轉化為大寫,第2個字符到第n個字符轉化為小寫,其他的不變,那末我們該如何實現呢?
不使用擴大方法:
<span style="font-size:10px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
//抽象出靜態StringHelper類
public static class StringHelper
{
//抽象出來的將字符串第1個字符大寫,從第1個到第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));
}
}
}</span>
使用擴大方法:
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這樣的靜態方法時更加便捷。用起來就像是被擴大類型確切具有該實例方法1樣。
2.擴大方法不改變被擴大類的代碼,不用重新編譯、修改、派生被擴大類
定義擴大方法
1.定義1個靜態類以包括擴大方法。
2.該類必須對客戶端代碼可見。
3.將該擴大方法實現為靜態方法,并使其最少具有與包括類相同的可見性。
4.方法的第1個參數指定方法所操作的類型;該參數必須以 this 修飾符開頭。
請注意,第1個參數不是由調用代碼指定的,由于它表示正利用運算符的類型,并且編譯器已知道對象的類型。 您只需通過 n 為這兩個形參提供實參。
注意事項:
1.擴大方法必須在靜態類中定義
2.擴大方法的優先級低于同名的類方法
3.擴大方法只在特定的命名空間內有效
4.除非必要不要濫用擴大方法
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈