C# 部分类和部分方法
- 部分类的定义和用途:在C#中,部分类(Partial Class)允许将一个类的定义分割到多个源文件中,使用
partial
关键字标识。这在大型项目中或多个开发人员同时工作在同一类上时非常有用。 - 部分类的工作原理:部分类的不同部分在编译时合并为一个完整的类。所有部分必须在同一命名空间中,且具有相同的访问修饰符。部分类允许在不同文件中定义类的不同属性和方法。
- 部分方法的概念:部分类可以包含部分方法,这些方法的声明和可选实现可以分别在类的不同部分定义。如果未提供实现,则该方法及其调用在编译时会被删除。部分方法必须是
void
类型且隐式为private
。
在 许多情况下,当您需要分割一个类的定义时,比如在大型项目中工作,多个开发人员和程序员可能需要同时在同一个类上工作。在这种情况下,我们可以使用名为 部分类(Partial Class) 的功能。
部分类简介
在 C#(或面向对象编程)中,我们可以将一个类的定义分割到两个或更多的源文件中。这些源文件包含类定义的一部分,所有部分在应用程序编译时被组合起来。为了分割一个类的定义,我们需要使用 partial
关键字。
示例 1:
我们有一个名为 HeightWeightInfo
的项目,显示身高和体重。
我们有一个名为 File1.cs
的文件,其中有一个名为 Record
的部分类。它有两个整型变量 h
和 w
,以及一个名为 Record
的方法/构造函数,用于赋值 h
和 w
。
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
的方法。此方法将显示 h
和 w
的值。
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
中定义的方法的 h
和 w
。
对象 myRecord
调用了在 File2.cs
中定义的方法 PrintRecord
。
这表明 partial
关键字有助于将在不同文件中定义的类的所有属性组合起来,使其作为一个单一类工作。
partial
类可以使用的场合:
- 在有多于一个开发人员的大型项目中工作时,它有助于开发人员同时对同一个类进行工作。
- 可以向类添加或修改代码,而无需重新创建由 IDE(如 Visual Studio)自动生成的源文件。
记住关于 Partial 类的事项
partial
关键字指定类的其他部分可以在命名 空间中定义。如果我们试图使类成为部分类,使用 partial
关键字是必需的。类的所有部分应在相同的命名空间中,并且在编译时可用,以形成最终类型。所有部分必须具有相同的访问修饰符,例如 private
、public
等。
- 如果任何部分声明为
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
的文件,其中有两个方法 BuildEngine
和 InitializeCar
。方法 InitializeCar
是部分方法,也在 file1.cs
中定义。
public partial class Car
{
public void BuildEngine() { }
partial void InitializeCar()
{
string str = "Car";
}
}
部分方法声明包括两部分:
- 在
file1.cs
中的定义。 - 在
file2.cs
中的实现。
它们可能在部分类的不同部分,或在同一部分中。
记住关于 Partial 方法的事项
partial
关键字。- 返回类型
void
。 - 隐式为
private
。 - 不能是
virtual
。