C 學習筆記(八) 擴充套件方法

2021-09-07 00:25:24 字數 1308 閱讀 9284

還記得第一次使用dotween時,發現緩動方法竟然是可以直接用transform物件中呼叫到,當時就被震撼到了(那是還是c#小白乙隻)。好了不多說了,今天來學習一下c#的這個特性——擴充套件方法。

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

這樣我們可以方便的擴充套件物件方法而無需使用繼承,同時也可以給密封類新增方法。

我們來看乙個例子:

1

using

system;23

namespace

study4;

10var result = ints.orderby(g =>g);

11foreach (var i in

result)

1215

16console.read();17}

18}19 }

上面的**會報錯:找不到orderby方法,因為int型別的陣列就沒有這個方法。如果我們匯入linq的包後就可以使用了,如下:

using system.linq;

原因就是orderby是linq提供的乙個擴充套件方法,是我們可以任意的新增指定類的公共方法。

我們要新增乙個擴充套件方法,需要新增乙個靜態類,如下我們新增乙個擴充套件string的方法,通過該方法我們可以獲取字串的單詞數量。

1

using

system;23

namespace

study414

}1516public

static

class

myextensions

17, stringsplitoptions.removeemptyentries).length;21}

22}23 }

執行程式輸出「5」。

擴充套件方法必須在乙個非巢狀、非泛型的靜態類中定義;

必須有乙個以this關鍵字加上型別的引數,該引數表示擴充套件該型別的方法,同時將該型別的值作為引數傳遞進來;

第乙個引數不能使用out和ref修飾符;

第乙個引數不能為指標型別;

我們都知道乙個為空的物件呼叫任何方法都會丟擲空指標異常,但是如果使用擴充套件方法卻不會這樣,如下:

1

using

system;23

namespace

study414

}1516public

static

class

myextensions

1722

}23 }

執行會返回「true」。

C 學習筆記4 擴充套件方法

有許多方法擴充套件類。如果有類的源 繼承就是給物件新增給你的好方法。但如果沒有源 該怎麼辦?此時可以使用擴充套件方法,擴充套件方法是靜態方法,是類的一部分,但實際上沒有放在類的源 中。定義和呼叫擴充套件方法步驟 1 定義乙個靜態類以包含擴充套件方法。該類必須對客戶端 可見。有關可訪問性規則的更多資訊...

C 學習 擴充套件方法

對於乙個已有類來說,其方法應該是固定的,但有些時候我們需要給其新增新的方法來實現一些新功能。比如說,將double陣列以字串形式輸出,double.tostring 得到的結果是system.double,而不是我們想要的。那麼,如何實現這種效果呢?單獨寫乙個方法也是可以的,如 public str...

C 學習 擴充套件方法

並不是所有的方法都可以用作擴充套件方法,如何分辨 中定義的是擴充套件方法還是普通方法呢?我們需要考察它是否符合下列擴充套件方法的定義規則 1.擴充套件方法必須在乙個非巢狀 非泛型的靜態類中定義 2.它至少要有乙個引數 3.第乙個引數必須加上this關鍵字作為字首 第乙個引數型別也稱為擴充套件型別,即...