還記得第一次使用dotween時,發現緩動方法竟然是可以直接用transform物件中呼叫到,當時就被震撼到了(那是還是c#小白乙隻)。好了不多說了,今天來學習一下c#的這個特性——擴充套件方法。
擴充套件方法使你能夠向現有型別「新增」方法,而無需建立新的派生型別、重新編譯或以其他方式修改原始型別。
這樣我們可以方便的擴充套件物件方法而無需使用繼承,同時也可以給密封類新增方法。
我們來看乙個例子:
1using
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的方法,通過該方法我們可以獲取字串的單詞數量。
1using
system;23
namespace
study414
}1516public
static
class
myextensions
17, stringsplitoptions.removeemptyentries).length;21}
22}23 }
執行程式輸出「5」。
擴充套件方法必須在乙個非巢狀、非泛型的靜態類中定義;
必須有乙個以this關鍵字加上型別的引數,該引數表示擴充套件該型別的方法,同時將該型別的值作為引數傳遞進來;
第乙個引數不能使用out和ref修飾符;
第乙個引數不能為指標型別;
我們都知道乙個為空的物件呼叫任何方法都會丟擲空指標異常,但是如果使用擴充套件方法卻不會這樣,如下:
1using
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關鍵字作為字首 第乙個引數型別也稱為擴充套件型別,即...