分部类或结构能够包含分部方法。 类的一个部分包含方法的签名。 能够在同一部分或另外一个部分中定义可选实现。 若是未提供该实现,则会在编译时删除方法以及对方法的全部调用。html
分部方法使类的某个部分的实施者可以定义方法(相似于事件)。 类的另外一部分的实施者能够决定是否实现该方法。 若是未实现该方法,编译器会删除方法签名以及对该方法的全部调用。 调用该方法(包括调用中的任何参数计算结果)在运行时没有任何影响。 所以,分部类中的任何代码均可以随意地使用分部方法,即便未提供实现也是如此。 调用但不实现该方法不会致使编译时错误或运行时错误。优化
在自定义生成的代码时,分部方法特别有用。 这些方法容许保留方法名称和签名,所以生成的代码能够调用方法,而开发人员能够决定是否实现方法。 与分部类很是相似,分部方法使代码生成器建立的代码和开发人员建立的代码可以协同工做,而不会产生运行时开销。spa
分部方法声明由两个部分组成:定义和实现。 它们能够位于分部类的不一样部分中,也能够位于同一部分中。 若是不存在实现声明,则编译器会优化定义声明和对方法的全部调用。code
// file1.cs 中定义 partial void onNameChanged(); // file2.cs 中实现 partial void onNameChanged() { // 实现逻辑 }
分部方法不能为 extern 方法,由于主体的存在肯定了方法是在定义仍是在实现。开发
分部方法能够是泛型的。 约束将放在定义分部方法声明上,但也能够选择重复放在实现声明上。 参数和类型参数名称在实现声明和定义声明中没必要相同。编译器
你能够为已定义并实现的分部方法生成委托,但不能为已经定义但未实现的分部方法生成委托。