跳到主要内容

C# 部分类和部分方法

提示
  1. 部分类的定义和用途:在C#中,部分类(Partial Class)允许将一个类的定义分割到多个源文件中,使用 partial 关键字标识。这在大型项目中或多个开发人员同时工作在同一类上时非常有用。
  2. 部分类的工作原理:部分类的不同部分在编译时合并为一个完整的类。所有部分必须在同一命名空间中,且具有相同的访问修饰符。部分类允许在不同文件中定义类的不同属性和方法。
  3. 部分方法的概念:部分类可以包含部分方法,这些方法的声明和可选实现可以分别在类的不同部分定义。如果未提供实现,则该方法及其调用在编译时会被删除。部分方法必须是 void 类型且隐式为 private

在许多情况下,当您需要分割一个类的定义时,比如在大型项目中工作,多个开发人员和程序员可能需要同时在同一个类上工作。在这种情况下,我们可以使用名为 部分类(Partial Class) 的功能。

部分类简介

在 C#(或面向对象编程)中,我们可以将一个类的定义分割到两个或更多的源文件中。这些源文件包含类定义的一部分,所有部分在应用程序编译时被组合起来。为了分割一个类的定义,我们需要使用 partial 关键字。

示例 1:

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

我们有一个名为 File1.cs 的文件,其中有一个名为 Record 的部分类。它有两个整型变量 hw,以及一个名为 Record 的方法/构造函数,用于赋值 hw

namespace HeightWeightInfo
{
class File1
{
}
public partial class Record
{
private int h;
private int w;
public Record(int h, int w)
{
this.h = h;
this.w = w;
}
}
}

这里是另一个名为 File2.cs 的文件,带有相同的部分类 Record,它只有一个名为 PrintRecord 的方法。此方法将显示 hw 的值。

namespace HeightWeightInfo
{
class File2
{
}
public partial class Record
{
public void PrintRecord()
{
Console.WriteLine("Height:" + h);
Console.WriteLine("Weight:" + w);
}
}
}

现在我们可以看到项目的 main 方法:

namespace HeightWeightInfo
{
class Program
{
static void Main(string[] args)
{
Record myRecord = new Record(10, 15);
myRecord.PrintRecord();
Console.ReadLine();
}
}
}

我们在这里有一个类 Record 的对象 myRecord,它将参数值 10 和 15 分别传递给 File1.cs 中定义的方法的 hw

对象 myRecord 调用了在 File2.cs 中定义的方法 PrintRecord

这表明 partial 关键字有助于将在不同文件中定义的类的所有属性组合起来,使其作为一个单一类工作。

partial 类可以使用的场合:

  1. 在有多于一个开发人员的大型项目中工作时,它有助于开发人员同时对同一个类进行工作。
  2. 可以向类添加或修改代码,而无需重新创建由 IDE(如 Visual Studio)自动生成的源文件。

记住关于 Partial 类的事项

partial 关键字指定类的其他部分可以在命名空间中定义。如果我们试图使类成为部分类,使用 partial 关键字是必需的。类的所有部分应在相同的命名空间中,并且在编译时可用,以形成最终类型。所有部分必须具有相同的访问修饰符,例如 privatepublic 等。

  • 如果任何部分声明为 abstract,那么整个类型被视为 abstract
  • 如果任何部分声明为 sealed,那么整个类型被视为 sealed
  • 如果任何部分声明了基类型,那么整个类型继承该类。
  • 在部分定义中声明的任何类成员对所有其他部分都可用。
  • 部分类的所有部分应该在相同的命名空间中。

注意: partial 修饰符不适用于代理或枚举声明。

介绍 Partial 方法

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

示例 2:

让我们以 file1.cs 中定义的部分类 Car 为例,它有三个方法 InitializeCar()BuildRim()BuildWheels()。在这些方法中,InitializeCar 被定义为 partial

public partial class Car
{
partial void InitializeCar();
public void BuildRim() { }
public void BuildWheels() { }
}

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

public partial class Car
{
public void BuildEngine() { }
partial void InitializeCar()
{
string str = "Car";
}
}

部分方法声明包括两部分:

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

它们可能在部分类的不同部分,或在同一部分中。

记住关于 Partial 方法的事项

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