C# - 分部类和分部方法
在 C# 中,您可以使用 `partial` 关键字将类、结构、方法或接口的实现拆分到多个 `.cs` 文件中。编译器在编译程序时会将来自多个 `.cs` 文件的所有实现组合起来。
考虑以下包含 `Employee` 类的 `EmployeeProps.cs` 和 `EmployeeMethods.cs` 文件。
EmployeeProps.cs
public partial class Employee
{
public int EmpId { get; set; }
public string Name { get; set; }
}
EmployeeMethods.cs
public partial class Employee
{
//constructor
public Employee(int id, string name){
this.EmpId = id;
this.Name = name;
}
public void DisplayEmpInfo() {
Console.WriteLine(this.EmpId + " " this.Name);
}
}
上面,`EmployeeProps.cs` 包含 `Employee` 类的属性,而 `EmployeeMethods.cs` 包含 `Employee` 类的所有方法。这些文件将被编译成一个 `Employee` 类。
示例:组合类
public class Employee
{
public int EmpId { get; set; }
public string Name { get; set; }
public Employee(int id, string name){
this.EmpId = id;
this.Name = name;
}
public void DisplayEmpInfo(){
Console.WriteLine(this.EmpId + " " this.Name );
}
}
分部类的规则
- 所有分部类定义必须在相同的程序集和命名空间中。
- 所有部分必须具有相同的可访问性,例如 public 或 private 等。
- 如果任何部分被声明为 abstract、sealed 或基类型,则整个类都被声明为相同的类型。
- 不同的部分可以有不同的基类型,因此最终类将继承所有基类型。
- `partial` 修饰符只能紧接在 `class`、`struct` 或 `interface` 关键字之前。
- 允许嵌套分部类型。
分部方法
分部类或结构可以包含一个方法,该方法被拆分到分部类或结构的两个单独的 `.cs` 文件中。其中一个 `.cs` 文件必须包含该方法的签名,而另一个文件可以包含分部方法的可选实现。方法的声明和实现都必须具有 `partial` 关键字。
EmployeeProps.cs
public partial class Employee
{
public Employee() {
GenerateEmpId();
}
public int EmpId { get; set; }
public string Name { get; set; }
partial void GenerateEmployeeId();
}
EmployeeMethods.cs
public partial class Employee
{
partial void GenerateEmployeeId()
{
this.EmpId = random();
}
}
上面,`EmployeeProps.cs` 包含分部方法 `GenerateEmployeeId()` 的声明,该方法在构造函数中使用。`EmployeeMethods.cs` 包含 `GenerateEmployeeId()` 方法的实现。以下代码演示了如何创建一个使用分部方法的 `Employee` 类对象。
EmployeeMethods.cs
class Program
{
static void Main(string[] args)
{
var emp = new Employee();
Console.WriteLine(emp.EmpId); // prints genereted id
Console.ReadLine();
}
}
分部方法的规则
- 分部方法必须使用 `partial` 关键字,并且必须返回 `void`。
- 分部方法可以有 `in` 或 `ref` 参数,但不能有 `out` 参数。
- 分部方法是隐式私有方法,因此不能是虚方法。
- 分部方法可以是静态方法。
- 分部方法可以是泛型方法。
在此处了解更多关于分部类和分部方法的信息。