理解 C# 分部类与分部方法
理解 C# 分部类与分部方法
本文解释 C# 开发者为何使用分部类和分部方法管理大型代码库、高效协作及优化编译。
当多位开发者协作同一个庞大类,或需合并手写代码与 Visual Studio 等工具生成的代码时,C# 的 partial 关键字提供整洁解决方案。
什么是分部类?
分部类允许将单个类的定义拆分到两个或多个源文件。每个文件包含类的一个片段,编译时编译器将它们拼合。partial 关键字必须出现在类的每个部分中。
示例 1 – 拆分简单类
假设项目 HeightWeightInfo 存储人员身高体重。
namespace HeightWeightInfo {
public partial class Record {
private int h;
private int w;
public Record(int h, int w) {
this.h = h;
this.w = w;
}
}
}
同一 Record 类在第二个文件继续:
namespace HeightWeightInfo {
public partial class Record {
public void PrintRecord() {
Console.WriteLine("Height:" + h);
Console.WriteLine("Weight:" + w);
}
}
}
使用该类的程序:
namespace HeightWeightInfo {
class Program {
static void Main(string[] args) {
Record myRecord = new Record(10, 15);
myRecord.PrintRecord();
Console.ReadLine();
}
}
}
编译器将两个 Record 定义合并为包含构造函数和 PrintRecord 方法的单一类。
何时使用分部类
- 大型项目多人协作:各成员编辑不同文件避免冲突。
- 自动生成代码:IDE 常生成不应手动修改的文件;分部类允许添加自定义逻辑而不改动生成代码。
关键要点
partial关键字必须出现在贡献该类的每个文件中。- 所有部分必须位于同一命名空间并一起编译。
- 所有部分必须共享相同访问修饰符(如
public、internal)。 - 若任一部分声明类为
abstract或sealed,整个类继承该属性。 - 任一部分定义的成员对其他所有部分可见。
- 不允许在委托或枚举上使用 partial 修饰符。
什么是分部方法?
分部方法是特殊方法,可在分部类的一个部分声明,在另一部分可选实现。若省略实现,编译时将同时移除方法声明及其所有调用,可提升性能。
示例 2 – 使用分部方法
在 file1.cs 中,Car 类声明分部方法及其他常规方法。
public partial class Car {
partial void InitializeCar();
public void BuildRim() { }
public void BuildWheels() { }
}
在 file2.cs 中,同一 Car 类提供 InitializeCar 实现并添加另一方法。
public partial class Car {
public void BuildEngine() { }
partial void InitializeCar() {
string str = "Car";
}
}
分部方法声明由两部分组成:一个文件中的签名,同一或另一文件中的可选实现。
分部方法规则
- 必须用
partial关键字声明。 - 返回类型始终为
void(无返回值)。 - 隐式为
private;不能是public、protected或internal。 - 不能声明为
virtual、override或abstract。 - 若无实现,编译器移除该方法及其所有调用。
C语言
- ASTM A729 A 级:双重正火回火钢——中碳结构钢标准
- ASTM A649 2 级 正火回火钢:中碳结构钢规格与性能
- ASTM A288 Class 4 淬火回火中碳钢:规格与性能详解
- ASTM A288 Class 5 淬火回火中碳钢:性能与标准全览
- C# 类与对象:面向对象编程的基石
- 掌握 C# 抽象类与抽象方法:实战指南
- 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
- C++类与对象:面向对象编程实战指南
- C++ 友元函数与友元类:突破访问控制的利器
- C# 继承完全指南:基类、派生类、初始化与多重继承替代方案
- C# 多态完全指南:静态多态与动态多态(重载、重写、虚方法)
- 精通 Java:理解对象、类与核心 OOP 概念