分部類或結構能夠包含分部方法。 類的一個部分包含方法的簽名。 能夠在同一部分或另外一個部分中定義可選實現。 若是未提供該實現,則會在編譯時刪除方法以及對方法的全部調用。html
分部方法使類的某個部分的實施者可以定義方法(相似於事件)。 類的另外一部分的實施者能夠決定是否實現該方法。 若是未實現該方法,編譯器會刪除方法簽名以及對該方法的全部調用。 調用該方法(包括調用中的任何參數計算結果)在運行時沒有任何影響。 所以,分部類中的任何代碼均可以隨意地使用分部方法,即便未提供實現也是如此。 調用但不實現該方法不會致使編譯時錯誤或運行時錯誤。優化
在自定義生成的代碼時,分部方法特別有用。 這些方法容許保留方法名稱和簽名,所以生成的代碼能夠調用方法,而開發人員能夠決定是否實現方法。 與分部類很是相似,分部方法使代碼生成器建立的代碼和開發人員建立的代碼可以協同工做,而不會產生運行時開銷。spa
分部方法聲明由兩個部分組成:定義和實現。 它們能夠位於分部類的不一樣部分中,也能夠位於同一部分中。 若是不存在實現聲明,則編譯器會優化定義聲明和對方法的全部調用。code
// file1.cs 中定義 partial void onNameChanged(); // file2.cs 中實現 partial void onNameChanged() { // 實現邏輯 }
分部方法不能爲 extern 方法,由於主體的存在肯定了方法是在定義仍是在實現。開發
分部方法能夠是泛型的。 約束將放在定義分部方法聲明上,但也能夠選擇重複放在實現聲明上。 參數和類型參數名稱在實現聲明和定義聲明中沒必要相同。編譯器
你能夠爲已定義並實現的分部方法生成委託,但不能爲已經定義但未實現的分部方法生成委託。