10.4 部分类定义
如果所创建的类包含一种类型或其他类型的许多成员时,就很容易混淆,代码文件也比较长。这里可以采用前面章节介绍的一种方法,即给代码分组。在代码中定义区域,就可以折叠和展开各个代码区,使代码更便于阅读。例如,有一个类的定义如下:
public class MyClass { #region Fields private int myInt; #endregion #region Constructor public MyClass() { myInt = 99; } #endregion #region Properties public int MyInt { get { return myInt; } set { myInt = value; } } #endregion #region Methods public void DoSomething() { // Do something.. } #endregion }
上述代码可以展开和折叠类的字段、属性、构造函数和方法,以便集中精力考虑自己感兴趣的内容。甚至可以按这种方式嵌套各个区域,这样一些区域就只能在包含它们的区域被展开后才能看到。
但是, 即便使用这种技术,代码也可能难以理解。 对此, 一种方法是使用部分类定义(partial class definitions)。简言之,就是使用部分类定义,把类的定义放在多个文件中。例如,可以把字段、属性和构造函数放在一个文件中,而把方法放在另一个文件中。为此,只需在每个包含部分类定义的文件中对类使用partial关键字即可,如下所示:
public partial class MyClass { ... }
如果使用部分类定义, partial关键字就必须出现在包含定义部分的每个文件的与此相同的位置。
部分类对Windows应用程序隐藏与窗体布局相关的代码有很大的作用。 第2章已经介绍了这些内容。在Form1类中,Windows窗体的代码存储在Form1.cs和Form1.Designer.cs中,这样就可以主要考虑窗体的功能,无需曾担心代码会被自己不感兴趣的信息搅乱。
对于部分类,最后要注意的一点是:应用于部分类的接口也会应用于整个类,也就是说,下面的两个定义:
public partial class MyClass : IMyInterface1 { ... } public partial class MyClass : IMyInterface2 { ... }
和
public class MyClass : IMyInterface1, IMyInterface2 { ... }
是等价的。
部分类定义可以在一个部分类定义文件或者多个部分类定义文件中包含基类。但如果基类在多个定义文件中指定,它就必须是同一个基类,因为在C#中,类只能继承一个基类。