「擴充套件方法使您能夠向現有型別「新增」方法,而無需建立新的派生型別、重新編譯或以其他方式修改原始型別。」
這是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();
這樣看起來是不是更好,下面來看看具體怎麼實現吧
第一步:
我先建立乙個解決方案,乙個web應用程式(webtest)及乙個類庫(w.common)
在webtest專案新增引用w.common專案
第二步:在類庫中新建乙個名為estring.cs類
using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
namespace
w.common
}
}
看了上面的**了吧,擴充套件方法規定類必須是乙個靜態類,estring是乙個靜態類,裡面包含的所有方法都必須是靜態方法。
msdn是這樣規定擴充套件方法的:「擴充套件方法被定義為靜態方法,但它們是通過例項方法語法進行呼叫的。 它們的第乙個引數指定該方法作用於哪個型別,並且該引數以 this 修飾符為字首。」
estring裡有乙個toint的靜態方法,他接收乙個自身引數this,型別為string,this string必須在方法引數的第乙個位置。
這句話什麼意思,即你需要對string擴充套件乙個toint方法,this是string例項化後的物件,這可能說的不太清楚,我的表述能力能弱,不要見怪呀。。。通俗的說就是,擴充套件方法跟靜態類的名稱無關,只需要在乙個靜態類裡面定義乙個靜態方法,第乙個引數必須this string開頭。
如果需要你要對datetime型別擴充套件方法名為isrange(判斷是否在此時間範圍內),**如下:
///
/// 此時間是否在此範圍內 -1:小於開始時間 0:在開始與結束時間範圍內 1:已超出結束時間
///
///
///
///
///
public
static
int
isrange(
this
datetime t, datetime starttime, datetime endtime)
if
(((endtime - t).totalseconds < 0))
return
0;
}
這裡的擴充套件方法是用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;
//這裡引用擴充套件方法所在的命名空間
namespace
webtest
///
/// 沒有用擴充套件方法
///
private
void
use1()
///
/// 使用擴充套件方法
///
private
void
use2()
public
static
int
strtoint(
string
s)
}
}
C 擴充套件方法
c 語言從3.0開始增加了乙個很特別的功能 擴充套件方法。那麼擴充套件方法起什麼作用呢?很多時候我們想為已經存在的類擴充套件某些功能,而又沒有必要去繼承該類,甚至有時候這個類根本就不允許繼承,如string類,這時候就可以使用擴充套件方法來為其擴充套件功能。下面舉例說明 一 我們建立乙個類庫如下 c...
C 擴充套件方法
c 語言從3.0開始增加了乙個很特別的功能 擴充套件方法。那麼擴充套件方法起什麼作用呢?很多時候我們想為已經存在的類擴充套件某些功能,而又沒有必要去繼承該類,甚至有時候這個類根本就不允許繼承,如string類,這時候就可以使用擴充套件方法來為其擴充套件功能。下面舉例說明 一 我們建立乙個類庫如下 c...
C 擴充套件方法
使用 net 3.0之後,我一直都覺得有種方法很奇怪,這種方法在一般的方法前面多了乙個藍色的向下箭頭。這種方法其實是擴充套件方法,這種擴充套件方法不需要去修改原類。class program public static class extendfunction 例子中我定義了乙個擴充套件方法,這個方...