原始型別擴充套件方法 this引數修飾符

2021-07-25 12:36:21 字數 1551 閱讀 8188

擴充套件方法使您能夠向現有型別「新增」方法,而無需建立新的派生型別、重新編譯或以其他方式修改原始型別。擴充套件方法是一種特殊的靜態方法,但可以像擴充套件型別上的例項方法一樣進行呼叫。對於用 c# 和 visual basic 編寫的客戶端**,呼叫擴充套件方法與呼叫在型別中實際定義的方法之間沒有明顯的差異。

擴充套件方法被定義為靜態方法,但它們是通過例項方法語法進行呼叫的。它們的第乙個引數指定該方法作用於哪個型別,並且該引數以 this 修飾符為字首。僅當您使用 using 指令將命名空間顯式匯入到源**中之後,擴充套件方法才位於範圍中。
下面的示例演示為 system.string 類定義的乙個擴充套件方法。請注意,它是在非巢狀、非泛型靜態類內部定義的:

namespace extensionmethods

, stringsplitoptions.removeemptyentries).length;

}}

}

可使用以下 using 指令將 wordcount 擴充套件方法放入範圍中:

using extensionmethods;

而且,可以在應用程式中使用以下語法對該擴充套件方法進行呼叫:

string s = 「hello extension methods」;

int i = s.wordcount();

在**中,可以使用例項方法語法呼叫該擴充套件方法。但是,編譯器生成的中間語言 (il) 會將**轉換為對靜態方法的呼叫。因此,並未真正違反封裝原則。實際上,擴充套件方法無法訪問它們所擴充套件的型別中的私有變數。

定義和呼叫擴充套件方法:

1、定義乙個靜態類以包含擴充套件方法。該類必須對客戶端**可見。有關可訪問性規則的更多資訊,請參見訪問修飾符(c# 程式設計指南)。

2、將該擴充套件方法實現為靜態方法,並使其至少具有與包含類相同的可見性。

3、該方法的第乙個引數指定方法所操作的型別;該引數必須以 this 修飾符開頭。

4、在呼叫**中,新增一條 using 指令以指定包含擴充套件方法類的命名空間。

5、按照與呼叫型別上的例項方法一樣的方式呼叫擴充套件方法。

請注意,第乙個引數不是由呼叫**指定的,因為它表示正應用運算子的型別,並且編譯器已經知道物件的型別。您只需通過 n 為這兩個形參提供實參。

示例 下面的示例在 myextensions.stringextension 類中實現了乙個名為 wordcount 的擴充套件方法。該方法對 string 類進行操作,而該類被指定為第乙個方法引數。myextensions 命名空間被匯入到應用程式命名空間中,並且該方法是在 main 方法內呼叫的。

using system.linq;

using system.text;

using system;

namespace

customextensions

, stringsplitoptions.removeemptyentries).length;}}

}namespace

extension_methods_******

", i);}}

}

C 為型別擴充套件方法

什麼是擴充套件方法?擴充套件方法使您能夠向現有型別 或介面 新增 方法,而無需建立新的派生型別 重新編譯或以其他方式修改原始型別。擴充套件方法是一種特殊的靜態方法 但可以像擴充套件型別 上的例項方法一樣進行呼叫。對於用 c 和 visual basic 編寫的客戶端 呼叫擴充套件方法與呼叫在型別中實...

Unity 對型別的擴充套件方法

上圖是乙個定義的列舉型別direction,表示列舉東南西北四個方向。下圖是通過擴充套件產生了新的方法opposite。ps 這裡opposite方法的作用是獲取反方向 並且這種拓展也適用於列舉的物件,如下圖。direction2通過oppsite函式獲取到了direction1的反方向。上圖定義了...

Path型別的擴充套件方法 z

寫了乙個基於system.io.path型別方法的擴充套件型別,用於快速對檔案系統路徑進行操作。如下圖 todirectory方法會把乙個檔案路徑放到資料夾路徑內並返回結果,比如 d 資料夾 輸出 d 資料夾 c.jpgtodirectory方法還可以把一些列的檔案放到乙個資料夾路徑內,這裡還需要乙...