針對某個型別,如果我們不想或不能改變其內部,但想為該型別新增方法,我們可以使用擴充套件方法來實現。如果該型別有更高層次的抽象,比如介面,我們應為更高層次型別編寫擴充套件方法。另外,擴充套件方法是鏈式程式設計的前提。
判斷集合是否包含元素
list list = new list();if(list != null && list.count > 0
)
我們可以針對比int型別更高層次的icollection介面寫乙個擴充套件方法:
publicstatic
bool haselements(this
icollection list)
然後可以這樣使用:
list list = new list();if(list.haselements())
判斷乙個值是否在2個大小數之間
publicclass
a : icomparable{}
public
class
b : icomparable{}
public
class
c : icomparable{}
public
bool
isbetween(a a, b b, c c)
我們可以針對比某個具體類更高層次的icomparable介面寫乙個擴充套件方法:
publicstatic
bool isbetween(this t value, t min, t max) where t : icomparable
可以這樣使用:
int a = 10;a.isbetween(
1,8);
針對集合中的每乙個元素實施相同的方法
list strlist = new list();foreach(var item in
strlist)
首先,可以針對比string更高層次抽象的icollection編寫擴充套件方法,其次,遍歷元素執行的方法抽象成乙個委託引數。如下:
publicstatic
void eachmethod(this icollectionitems, actionaction)
}
現在可以這樣使用:
list strlist = new list();strlist.eachmethod(s =>);
判斷元素是否包含在集合中
string str = "a";list
strs = new list();
if(strs.contains(str))
可以針對比string更高層次抽象的泛型型別編寫擴充套件方法:
publicstatic
bool in(this t source, params
t list)
這樣使用:
string temp = "a";temp.in("a
","b
");
針對比具體型別更高層次的抽象編寫擴充套件方法例子
針對某個型別,如果我們不想或不能改變其內部,但想為該型別新增方法,我們可以使用擴充套件方法來實現。如果該型別有更高層次的抽象,比如介面,我們應為更高層次型別編寫擴充套件方法。另外,擴充套件方法是鏈式程式設計的前提。判斷集合是否包含元素 list list new list if list null ...
智慧型指標對比
智慧型指標對比 1 boost shared ptr 基於引用計數器refcount 原子的 1 建構函式中refcount 1,析構函式中refcount 1,當refcount的值減到為0時,該物件就會被銷毀。2 解決迴圈引用的問題 與weak ptr一起使用。weak ptr只引用不計數。3 ...
C語言陣列與指標對比
前面兩篇博文分別介紹了陣列與指標的知識,本篇將主要介紹兩者的聯絡與區別。希望對初學者有所幫助。分別定義乙個陣列與乙個指標變數,如下 int sarr 10 char ptr abcdefghi 通過下標訪問 通過間接訪問運算子 訪問 指標是左值 除非宣告為const 其值可以更改,陣列名是右值,其值...