【分部类】

可以将类或结构、接口或方法的定义拆分到两个或多个源文件中。每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。如:

4ad4187bc005d58b0169153696b5ced1.png

使用partial的几个要点:

1、所有部分都必须使用 partial 关键字。可使用范围为class、struct、interface。

2、各个部分必须具有相同的可访问性,如 public、private 等。

3、1)如果将任意部分声明为abstract的,则整个类型都被视为abstract。

2)如果将任意部分声明为sealed的,则整个类型都被视为sealed的。

3)如果任意部分声明基类型,则整个类型都将继承该类。

4、1)指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。

2)各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。

3)在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。

5、要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe 或 .dll 文件)中进行定义。分部定义不能跨越多个模块。

【实例】

1、编译时将对分部类型定义的属性进行合并。例如,请考虑下列声明:

61c2efafc58cb0ac7e85669e597d878c.png

它们等效于以下声明:

ca4e9368e3355ce1ac6b38acfb3d2c5f.png

2、例如,请考虑下列声明:

1d6d9b54947c9d9cd12ccf1e84a57a0d.png

它们等效于以下声明:

c1be01781462aa3123a781c4539643b4.png

【分部方法】

分部类或结构可以包含分部方法。类的一个部分包含方法的签名。可以在同一部分或另一个部分中定义可选实现。如果未提供该实现,则会在编译时移除方法以及对方法的所有调用。

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

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

分部方法声明由两个部分组成:定义和实现。它们可以位于分部类的不同部分中,也可以位于同一部分中。如果不存在实现声明,则编译器将优化定义声明和对方法的所有调用。

8ce0fcc6e44bd79dcf610aeddb58a6f6.png

分部方法要点:

1、分部方法声明必须以上下文关键字 partial 开头,并且方法必须返回 void。

2、分部方法为隐式 private 方法,因此不能为 virtual 方法。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐