系列目录    【已更新最新开发文章,点击查看详细】 <https://www.cnblogs.com/SavionZhang/p/11229640.html>
    分部类或结构可以包含分部方法。 类的一个部分包含方法的签名。 可以在同一部分或另一个部分中定义可选实现。 
如果未提供该实现,则会在编译时删除方法以及对方法的所有调用。

  分部方法使类的某个部分的实施者能够定义方法(类似于事件)。 类的另一部分的实施者可以决定是否实现该方法。 
如果未实现该方法,编译器会删除方法签名以及对该方法的所有调用。 调用该方法(包括调用中的任何参数计算结果)在运行时没有任何影响。 
因此,分部类中的任何代码都可以随意地使用分部方法,即使未提供实现也是如此。 调用但不实现该方法不会导致编译时错误或运行时错误。

  在自定义生成的代码时,分部方法特别有用。 这些方法允许保留方法名称和签名,因此生成的代码可以调用方法,而开发人员可以决定是否实现方法。 
与分部类非常类似,分部方法使代码生成器创建的代码和开发人员创建的代码能够协同工作,而不会产生运行时开销。

  分部方法声明由两个部分组成:定义和实现。 它们可以位于分部类的不同部分中,也可以位于同一部分中。 
如果不存在实现声明,则编译器会优化定义声明和对方法的所有调用。
// file1.cs 中定义 partial void onNameChanged(); // file2.cs 中实现 partial void
onNameChanged() {// 实现逻辑 }

*
分部方法声明必须以上下文关键字 partial
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/partial-type>
 开头,并且方法必须返回 void
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/void>


*
分部方法可以有 in
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/in-parameter-modifier>
 或 ref
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/ref>
 参数,但不能有 out
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/out-parameter-modifier>
 参数。

*
分部方法为隐式 private
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/private>
 方法,因此不能为 virtual
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/virtual>
 方法。

*
分部方法不能为 extern
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/extern>
 方法,因为主体的存在确定了方法是在定义还是在实现。

*
分部方法可以有 static
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/static>
 和 unsafe
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/unsafe>
 修饰符。

*
分部方法可以是泛型的。 约束将放在定义分部方法声明上,但也可以选择重复放在实现声明上。 参数和类型参数名称在实现声明和定义声明中不必相同。

*
你可以为已定义并实现的分部方法生成委托
<https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/delegate>
,但不能为已经定义但未实现的分部方法生成委托。

 
系列目录    【已更新最新开发文章,点击查看详细】
<https://www.cnblogs.com/SavionZhang/p/11229640.html>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信