針對比具體型別更高層次的抽象編寫擴充套件方法例子

2021-09-07 22:34:34 字數 1707 閱讀 5558

針對某個型別,如果我們不想或不能改變其內部,但想為該型別新增方法,我們可以使用擴充套件方法來實現。如果該型別有更高層次的抽象,比如介面,我們應為更高層次型別編寫擴充套件方法。另外,擴充套件方法是鏈式程式設計的前提。

判斷集合是否包含元素

list list = new list();

if(list != null && list.count > 0

)

我們可以針對比int型別更高層次的icollection介面寫乙個擴充套件方法:

public

static

bool haselements(this

icollection list)

然後可以這樣使用:

list list = new list();

if(list.haselements())

判斷乙個值是否在2個大小數之間

public

class

a : icomparable{}

public

class

b : icomparable{}

public

class

c : icomparable{}

public

bool

isbetween(a a, b b, c c)

我們可以針對比某個具體類更高層次的icomparable介面寫乙個擴充套件方法:

public

static

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編寫擴充套件方法,其次,遍歷元素執行的方法抽象成乙個委託引數。如下:

public

static

void eachmethod(this icollectionitems, actionaction)

}

現在可以這樣使用:

list strlist = new list();

strlist.eachmethod(s =>);

判斷元素是否包含在集合中

string str = "a"

;list

strs = new list();

if(strs.contains(str))

可以針對比string更高層次抽象的泛型型別編寫擴充套件方法:

public

static

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 其值可以更改,陣列名是右值,其值...