9.16 分部类型和分部方法——修饰符:partial

如何理解分部类型和分部方法呢?简单地说,就是将一个类型或方法拆分到两个或多个源文件中,每个源文件只包含类型定义的一部分。类、结构、接口、方法都可以拆分。

那么,为什么要进行拆分呢?或者说什么情况下才需要拆分?以下是几种使用场景:

❑当处理大型项目时,把一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理;

❑使用自动生成的源时,无须重新创建源文件便可将代码添加到类中。Visual Studio在创建Windows窗体、Web服务包装代码等时都使用此方法。无须修改Visual Studio创建的文件,就可创建使用这些类的代码,如图9-13所示。

9.16 分部类型和分部方法——修饰符:partial - 图1

图 9-13 Windows窗体代码中的分部类

对Windows窗体代码中的分部类进行说明,如表9-9所示。

9.16 分部类型和分部方法——修饰符:partial - 图2

9.16.1 分部类

这里主要介绍分部类。分部接口和分部结构将在相应章节学习。对于类来说,可以将不同的方法拆分到分部类中去,如图9-12所示。

9.16 分部类型和分部方法——修饰符:partial - 图3

图 9-14 分部类

分部类具有如下特征:

❑类的定义前加partial修饰符;

❑分部类可以定义在两个不同的.cs文件中,也可以位于同一个.cs文件中;

❑分部类必须同属一个命名空间。

下面,我们看一个分部类的例子,如代码清单9-42和代码清单9-43所示。

代码清单9-42 分部类Car1.cs


1 namespace ProgrammingCSharp4

2{

3 class ClassExample

4{

5 static void Main()

6{

7 Car car=new Car();

8 System.Console.WriteLine(car.DoSomething2());

9}

10}

11

12 partial class Car

13{

14 public string DoSomething1()

15{

16 return"DoSomething1()";

17}

18}

19}


代码清单9-43 分部类Car2.cs


1 namespace ProgrammingCSharp4

2{

3 partial class Car

4{

5 public string DoSomething2()

6{

7 return"DoSomething2()";

8}

9}

10}


在Car1.cs和Car2.cs文件的分部类中,分部定义了DoSomething1(代码清单9-42,第14行)和DoSomething2(代码清单9-43,第5行)方法,在ClassExample类的Main函数中,就可以调用Car实例的DoSomething2方法。

我们来看一下编译后生成的Car类的CIL代码,如图9-15所示。

9.16 分部类型和分部方法——修饰符:partial - 图4

图 9-15 分部类Car编译后的CIL代码

由此可以说明,分部类虽然定义在了不同的位置,但编译器会将它们合并为一,就像它们原本就没有分开过。