C 擴充套件方法的理解

2022-02-08 01:38:25 字數 3882 閱讀 5005

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

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

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

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

publicstaticintstrtoint(strings)

呼叫就使用

strings ="abc";

inti = strtoint(s);

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

strings ="abc";

inti = s.toint();

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

第一步:

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

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

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

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespacew.common

}

}

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

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

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的範圍內

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

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.web;

usingsystem.web.ui;

usingsystem.web.ui.webcontrols;

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

namespacewebtest

///

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

///

privatevoiduse1()

///

/// 使用擴充套件方法

///

privatevoiduse2()

publicstaticintstrtoint(strings)

}

}

C 擴充套件方法的理解

c 擴充套件方法的理解 擴充套件方法使您能夠向現有型別 新增 方法,而無需建立新的派生型別 重新編譯或以其他方式修改原始型別。這是msdn上說的,也就是你可以對string,int,datarow,datatable等這些型別的基礎上增加乙個或多個方法,使用時不需要去修改或編譯型別本身的 先做個例子...

C 擴充套件方法的理解

擴充套件方法使您能夠向現有型別 新增 方法,而無需建立新的派生型別 重新編譯或以其他方式修改原始型別。這是msdn上說的,也就是你可以對string,int,datarow,datatable等這些型別的基礎上增加乙個或多個方法,使用時不需要去修改或編譯型別本身的 先做個例子吧,以string為例,...

c 擴充套件方法的理解

擴充套件方法是靜態方法,是類的一部分,但是實際上沒有放在類的源 中。擴充套件方法所在的類也必須被宣告為static c 只支援擴充套件方法,不支援擴充套件屬性 擴充套件事件等。擴充套件方法的第乙個引數是要擴充套件的型別,放在this關鍵字的後面,告訴編譯期這個方法是money型別的一部分。在擴充套件...