部分类定义

  如果所创建的类包含一种类型或其他类型的许多成员时,就很容易引起混淆,代码文件页比较长。这里可以采用前面章节介绍的一种方法,即给代码分组。在代码中定义区域,就可以折叠和展开各个代码区,使代码更便于阅读。例如,有一个类的定义如下:

  1. public class MyClass
  2. {
  3. #region Fields
  4. private int myInt;
  5. #endregion
  6. #region Constructor
  7. public MyClass()
  8. {
  9. myInt = 99;
  10. }
  11. #endregion
  12. #region Properties
  13. public int MyInt
  14. {
  15. get
  16. {
  17. return myInt;
  18. }
  19. set
  20. {
  21. myInt = value;
  22. }
  23. }
  24. #endregion
  25. #region Methods
  26. public void DoSomething()
  27. {
  28. // Do something..
  29. }
  30. #endregion
  31. }

  上述代码可以展开和折叠类的字段、属性、构造函数和方法,以便集中精力考虑自己感兴趣的内容。甚至可以按这种方式嵌套各个区域,这样一些区域就只能在包含它们的区域被展开后才能看到。

  但是,即便使用这种技术,代码也可能难以理解(而且很多开发人员很反感代码区域)。对此,一种方法是使用部分类定义(partial class definition)。简言之,就是使用部分类定义,把类的定义放在多个文件中。例如,可将字段、属性和构造函数放在一个文件中,而把方法放在另一个文件中。为此,只需在包含部分类定义的每个文件中对类使用 partial 关键字即可,如下所示:

  1. public partial class MyClass
  2. {
  3. ...
  4. }

  如果使用部分类定义,partial 关键字就必须出现在包含部分类定义的每个文件的与此相同的位置。

  例如,类 MainWindow 中的 WPF 窗口将代码存储在两个文件 MainWindow.xaml.csMainWindow.g.i.cs 中(在 解决方案资源管理器 中选择 显示所有文件 并打开 obj\Debug 文件夹就 可以看到它们)。这样就可以重点考虑窗体的功能,不必担心代码会被自己不感兴趣的信息搅乱。

  对于部分类,最后要注意的一点是:应用于部分类的接口也会应用于整个类,也就是说,下面的两个定义:

  1. public partial class MyClass : IMyInterface1
  2. {
  3. ...
  4. }
  5. public partial class MyClass : IMyInterface2
  6. {
  7. ...
  8. }

  1. public class MyClass : IMyInterface1, IMyInterface2
  2. {
  3. ...
  4. }

  是等价的。

  部分类定义可以在一个部分类定义文件或者多个部分类定义文件中包含基类。但如果基类在多个定义文件中指定,它就必须是同一个基类,因为在 C#中,类只能继承一个基类。