C# 分部类和方法(Partial)

在C#中,可以使用 partial 关键字拆分多个.cs文件中的类、结构、方法或接口的实现。编译程序时,编译器将合并来自多个.cs文件的所有实现。

看以下包含 Employee 类的 employeeprops.cs 文件和 employeemethods.cs 文件。

publicpartialclassEmployee{publicintEmpId{get;set;}publicstringFirstName{get;set;}publicstringLastName{get;set;}publicintAge{get;set;}}
publicpartialclassMyPartialClass{publicEmployee(intId,stringname){this.EmpId=Id;this.Name=name;}publicvoidDisplayEmployeeInfo(){Console.WriteLine(this.EmpId+""this.FirstName+""+this.LastName);}publicvoidSave(intid,stringfirstName,stringlastName){Console.WriteLine("Saved!");}}

上面,EmployeeProps.cs包含Employee类的属性,而employeememethods .cs包含Employee类的所有方法。这些类将被编译为一个Employee类。

publicclassEmployee{publicintEmpId{get;set;}publicstringFirstName{get;set;}publicstringLastName{get;set;}publicintAge{get;set;}publicEmployee(intId,stringname){this.EmpId=Id;this.Name=name;}publicvoidDisplayEmployeeInfo(){Console.WriteLine(this.EmpId+""this.FirstName+""+this.LastName);}publicvoidSave(intid,stringfirstName,stringlastName){Console.WriteLine("Saved!");}}

分部类规则

  • 所有分部类定义必须位于同一程序集和命名空间中。

  • 所有分部都必须具有相同的可访问性,例如公共或私有等。

  • 如果任何分部声明为抽象、密封或基类型,那么整个类声明为相同的类型。

  • 不同的分部可以具有不同的基本类型,因此最终类将继承所有基本类型。

  • Partial修饰符只能出现在关键字class,struct 或 interface之前。

  • 允许嵌套分部类型。

分部方法

分部类或结构可以包含一个方法,该方法可以拆分为分部类或结构的两个单独的.cs文件。两个.cs文件中的一个必须包含方法的签名,其他文件可以包含分部方法的可选实现。方法的声明和实现都必须具有partial 关键字。

publicpartialclassEmployee{publicintEmpId{get;set;}publicstringFirstName{get;set;}publicstringLastName{get;set;}publicintAge{get;set;}partialvoidGenerateEmployeeId();}
publicpartialclassMyPartialClass{partialvoidGenerateEmployeeId(){this.EmpId=random();}}

上面, employeeprops.cs 文件包含 DisplayEmployeeInfo 方法的签名, employeemethods.cs 文件包含它的实现。编译器将在编译时将所有分部合并为一个。

它要求包括分部方法的签名,但不需要提供实现。如果调用但未实现该方法,则不会有编译时或运行时错误。

分部方法规则

  • 分部方法必须使用partial关键字,并且必须返回void。

  • 分部方法可以有in 或 ref没有out参数。

  • 分部方法是隐式私有方法,因此不能是虚方法。

  • 分部方法可以是静态方法。

  • 分部方法可以是泛型方法。

编辑于2024-05-20 13:19