c 擴充套件方法的使用

2021-07-15 13:36:08 字數 2841 閱讀 1285

「擴充套件方法使您能夠向現有型別「新增」方法,而無需建立新的派生型別、重新編譯或以其他方式修改原始型別。」

你一定很疑問什麼是擴充套件方法!什麼是擴充套件方法?回答這個問題之前,先看看我們一般情況下方法的呼叫。類似這樣的通用方法你一定寫過:

static void main(string args)

//將字串轉換為日期

public static datetime getdatetime(string strdate)

//得到非空的字串

public static string getnotnullstr(string strres)

或者在專案中有乙個類似utils的工具類,裡面有多個helper,例如stringhelper、xmlhelper等等,每個helper裡面有多個static的通用方法,然後呼叫的時候就是stringhelper.getnotnullstr(「aa」);這樣。還有一種普通的用法就是new 乙個物件,通過物件去呼叫類裡面的非static方法。反正博主剛開始做專案的時候就是這樣寫的。後來隨著工作經驗的累積,博主看到了擴充套件方法的寫法,立馬就感覺自己原來的寫法太low了。進入正題。

這是msdn上說的,也就是你可以對string,int,datarow,datatable等這些型別的基礎上增加乙個或多個方法,使用時不需要去修改或編譯型別本身的**。

先做個例子吧,以string為例,需要在字串型別中加乙個從字串轉為數值的功能。

以往我們可能是這樣做的,會專門寫乙個方法做過轉換

public static int strtoint(string s)

呼叫就使用

string s = "abc";

int i = strtoint(s)

若是string型別有乙個名為toint()(從字串轉為數值)的方法,就可以這樣呼叫了

string s = "abc";

int i = s.toint();

這樣看起來是不是更好,下面來看看具體怎麼實現

2.如何寫擴充套件方法

第一步:

我先建立乙個解決方案,乙個web應用程式(webtest)及乙個類庫(w.common)

在webtest專案新增引用w.common專案

第二步:在類庫中新建乙個名為estring.cs類

看了上面的**了吧,擴充套件方法規定類必須是乙個靜態類,estring是乙個靜態類,裡面包含的所有方法都必須是靜態方法。

msdn是這樣規定擴充套件方法的:「擴充套件方法被定義為靜態方法,但它們是通過例項方法語法進行呼叫的。 它們的第乙個引數指定該方法作用於哪個型別,並且該引數以 this 修飾符為字首。」

3.如何理解擴充套件方法

estring裡有乙個toint的靜態方法,他接收乙個自身引數this,型別為string,this string必須在方法引數的第乙個位置。

這句話什麼意思,即你需要對string擴充套件乙個toint方法,this是string例項化後的物件,這可能說的不太清楚,我的表述能力能弱,不要見怪呀。。。通俗的說就是,擴充套件方法跟靜態類的名稱無關,只需要在乙個靜態類裡面定義乙個靜態方法,第乙個引數必須this string開頭。

如果需要你要對datetime型別擴充套件方法名為isrange(判斷是否在此時間範圍內),**如下:

/// /// 此時間是否在此範圍內 -1:小於開始時間 0:在開始與結束時間範圍內 1:已超出結束時間

///

///

///

///

///

publicstaticintisrange(thisdatetime t, datetime starttime, datetime endtime)

if(((endtime - t).totalseconds < 0))

return0;

}

這裡的擴充套件方法是用this datetime打頭,那麼就可以這樣呼叫

time.isrange(t1,t2);//判斷時間time是否在t1到t2的範圍內

當前**在使用擴充套件方法前需要先引用命名空間

using system;

using system.collections.generic;

using system.linq;

using system.web;

using system.web.ui;

using system.web.ui.webcontrols;

using w.common;//這裡引用擴充套件方法所在的命名空間

namespacewebtest

/// /// 沒有用擴充套件方法

///

privatevoiduse1()

/// /// 使用擴充套件方法

///

privatevoiduse2()

publicstaticintstrtoint(strings)}}

這我第一次寫文章算是排過版的,用好長時間呀,以前都只是看別人的文章,現在才知道寫一篇好的文章真的不容易呀。

C 擴充套件方法的使用

c 擴充套件方法可以在不繼承原有類的基礎上,為原有類新增方法,c 擴充套件方法可以合併到要原有類的例項上,擴充套件方法需要定義為靜態方法,並且第乙個引數必須為要擴充套件型別的當前例項 引數前加this關鍵字 public static class extendstring 首先定義乙個靜態類,定義乙...

C 擴充套件方法的使用

c 3.0引入了擴充套件方法的概念,乍一聽起來不是很好理解,我們舉乙個簡單的例子 有乙個業務場景,需要頻繁地判斷乙個字串內是否包含阿拉伯數字,字串的contains方法是沒有辦法實現的,那麼可以考慮寫乙個公共方法,封裝乙個方法隨時來判斷,類似下面這樣的 public static class str...

C 擴充套件方法的使用

譯文鏈結 c 在 3.0 版本中提供了對 擴充套件方法 的支援,擴充套件方法常用於給乙個已存在的類新增新的方法從而擴充套件該類的功能,最關鍵的是 你不需要在現存類中派生乙個子類,你也不需要破壞性的修改類的現有 骨架,更談不上重新編譯了,擴充套件方法能夠提供 的可讀性同時又可以擴充套件類的功能。net...