分部方法
分部类或结构可以包含分部方法 类的一个部分包含方法的签名 可以在同一部分或另一个部分中定义可选实现 如果未提供该实现则会在编译时移除方法以及对方法的所有调用
分部方法使类的某个部分的实施者能够定义方法(类似于事件) 类的另一部分的实施者可以决定是否实现该方法 如果未实现该方法编译器将移除方法签名以及对该方法的所有调用 调用该方法包括调用中的任何计算结果在运行时没有任何影响 因此分部类中的任何代码都可以随意地使用分部方法即使未提供实现也是如此 如果调用了未实现的方法将不会导致编译时错误或运行时错误
在自定义生成的代码时分部方法特别有用 这些方法允许保留方法名称和签名因此生成的代码可以调用方法而开发人员可以决定是否实现方法 与分部类非常类似分部方法使代码生成器创建的代码和开发人员创建的代码能够协同工作而不会产生运行时开销
分部方法声明由两个部分组成定义和实现 它们可以位于分部类的不同部分中也可以位于同一部分中 如果不存在实现声明则编译器将优化定义声明和对方法的所有调用
限制条件
分部方法声明必须以上下文关键字 partial 开头并且方法必须返回 void
分部方法可以有 ref 参数但不能有 out 参数
分部方法为隐式 private 方法因此不能为 virtual 方法
分部方法不能为 extern 方法因为主体的存在确定了方法是在定义还是在实现
分部方法可以有 static 和 unsafe 修饰符
分部方法可以为泛型的约束将放在定义分部方法声明上但也可以选择重复放在实现声明上参数和类型参数名称在实现声明和定义声明中不必相同
您可以为已定义并实现的分部方法生成委托但不能为已经定义但未实现的分部方法生成委托
代码示例
partial void onNameChanged();partial void onNameChanged(){}