原文: https://www.programiz.com/csharp-programming/partial-class-and-methods

在本文中,我们将学习如何以及为什么在 C# 中实现部分类和部分方法。

在很多情况下,您可能需要拆分类定义,例如在处理大型项目时,可能需要多个开发人员和程序员同时处理同一个类。 在这种情况下,我们可以使用称为部分类的功能。


部分类简介

在使用 C# (或 OOP)进行编程时,我们可以将类的定义划分为两个或多个源文件。 源文件包含类定义的一部分,并且在编译应用时将所有部分组合在一起。 为了拆分类定义,我们需要使用partial关键字。

示例 1:

我们有一个名为HeightWeightInfo的项目,它显示了身高和体重。

我们有一个名为File1.cs的文件,其子类名为Record。 它具有两个整数变量hw和一个名为Record的方法/构造器,该方法/构造函数分配hw的值。

  1. namespace HeightWeightInfo
  2. {
  3. class File1
  4. {
  5. }
  6. public partial class Record
  7. {
  8. private int h;
  9. private int w;
  10. public Record(int h, int w)
  11. {
  12. this.h = h;
  13. this.w = w;
  14. }
  15. }
  16. }

这是另一个名为File2.cs的文件,具有相同的子类Record,该文件只有方法PrintRecord。 此方法将显示hw的值。

  1. namespace HeightWeightInfo
  2. {
  3. class File2
  4. {
  5. }
  6. public partial class Record
  7. {
  8. public void PrintRecord()
  9. {
  10. Console.WriteLine("Height:"+ h);
  11. Console.WriteLine("Weight:"+ w);
  12. }
  13. }
  14. }

现在,我们在这里可以看到项目的Main方法:

  1. namespace HeightWeightInfo
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Record myRecord = new Record(10, 15);
  8. myRecord.PrintRecord();
  9. Console.ReadLine();
  10. }
  11. }
  12. }

在这里,我们将Record的对象作为myRecord,将参数值 10 和 15 分别传递给hwFile1.cs中定义的方法。

PrintRecord方法由File2.cs中定义的对象myRecord调用。

这表明partial关键字有助于组合在各种文件中定义的类的所有属性,以作为单个类工作。

可以使用partial类的地方:

  1. 在与多个开发人员一起进行较大项目的同时,它可以帮助开发人员同时在同一个类上工作。
  2. 可以在不重新创建由 IDE(即 Visual Studio)自动生成的源文件的情况下,将代码添加或修改到该类。

要记住的事情

partial关键字指定可以在命名空间中定义类的其他部分。 如果我们要使一个类成为局部类,则必须使用partial关键字。 类的所有部分都应该在相同的命名空间中,并在编译时可用以形成最终类型。 所有部分都必须具有相同的访问修饰符,即私有,公共等。

  • 如果任何部分被声明为抽象的,则整个类型被认为是抽象的。
  • 如果任何部分声明为密封的,则整个类型都视为密封的。
  • 如果任何部分声明了基本类型,则整个类型都将继承该类。
  • 在部分定义中声明的任何类成员都可用于所有其他部分。
  • 局部类的所有部分都应位于同一命名空间中。

注意partial修饰符不适用于委托或枚举声明


部分方法的解释

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

示例 2:

让我们以在file1.cs中定义的局部类Car为例,该类具有三种方法InitializeCar()BuildRim()BuildWheels()。 在这些方法中,将InitializeCar定义为partial

  1. public partial class Car
  2. {
  3. partial void InitializeCar();
  4. public void BuildRim() { }
  5. public void BuildWheels() { }
  6. }

我们还有另一个名为file2.cs的文件,它具有两种方法BuildEngineInitializeCar。 方法InitializeCar是部分方法,也在file1.cs中定义。

  1. public partial class Car
  2. {
  3. public void BuildEngine() { }
  4. partial void InitializeCar()
  5. {
  6. string str = "Car";
  7. }
  8. }

部分方法声明由两部分组成:

  1. file1.cs中的定义。
  2. file2.cs中的实现相同。

它们可以在部分类的不同部分中,也可以在同一部分中。


关于部分方法的注意事项

  • partial关键字。
  • 返回类型void
  • 隐式private
  • 并且不能为virtual