C# - 分部类和方法
本文关键字:方法 | 更新日期: 2023-09-12 17:38:40
在 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
类。
Example: Combined Class
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 );
}
}
分部类的规则
- 所有分部类定义必须位于同一程序集和命名空间中。
- 所有部分必须具有相同的可访问性,如公共或私有等。
- 如果任何部分被声明为抽象、密封或基类型,则整个类被声明为同一类型。
- 不同的部件可以有不同的基类型,因此最终类将继承所有基类型。
- Partial 修饰符只能紧挨着关键字类、结构或接口之前出现。
- 允许嵌套分部类型。
分部方法
分部类或结构可以包含一个方法,该方法拆分为分部类或结构的两个单独的.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
参数。 - 分部方法是隐式私有方法,因此不能是虚拟的。
- 分部方法可以是静态方法。
- 分部方法可以是泛型的。
了解更多关于分部类和方法的信息here.