在C#中,可以使用 partial 關(guān)鍵字拆分多個(gè).cs文件中的類、結(jié)構(gòu)、方法或接口的實(shí)現(xiàn)。編譯程序時(shí),編譯器將合并來(lái)自多個(gè).cs文件的所有實(shí)現(xiàn)。
看以下包含 Employee 類的 employeeprops.cs 文件和 employeemethods.cs 文件。
public partial class Employee { public int EmpId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } }
public partial class MyPartialClass { public Employee(int Id, string name) { this.EmpId = Id; this.Name = name; } public void DisplayEmployeeInfo() { Console.WriteLine(this.EmpId + " " this.FirstName + " " + this.LastName); } public void Save(int id, string firstName, string lastName) { Console.WriteLine("Saved!"); } }
上面,EmployeeProps.cs包含Employee類的屬性,而employeememethods .cs包含Employee類的所有方法。這些類將被編譯為一個(gè)Employee類。
public class Employee { public int EmpId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public Employee(int Id, string name) { this.EmpId = Id; this.Name = name; } public void DisplayEmployeeInfo() { Console.WriteLine(this.EmpId + " " this.FirstName + " " + this.LastName); } public void Save(int id, string firstName, string lastName) { Console.WriteLine("Saved!"); } }
所有分部類定義必須位于同一程序集和命名空間中。
所有分部都必須具有相同的可訪問(wèn)性,例如公共或私有等。
如果任何分部聲明為抽象、密封或基類型,那么整個(gè)類聲明為相同的類型。
不同的分部可以具有不同的基本類型,因此最終類將繼承所有基本類型。
Partial修飾符只能出現(xiàn)在關(guān)鍵字class,struct 或 interface之前。
允許嵌套分部類型。
分部類或結(jié)構(gòu)可以包含一個(gè)方法,該方法可以拆分為分部類或結(jié)構(gòu)的兩個(gè)單獨(dú)的.cs文件。兩個(gè).cs文件中的一個(gè)必須包含方法的簽名,其他文件可以包含分部方法的可選實(shí)現(xiàn)。方法的聲明和實(shí)現(xiàn)都必須具有partial 關(guān)鍵字。
public partial class Employee { public int EmpId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } partial void GenerateEmployeeId(); }
public partial class MyPartialClass { partial void GenerateEmployeeId() { this.EmpId = random(); } }
上面, employeeprops.cs 文件包含 DisplayEmployeeInfo 方法的簽名, employeemethods.cs 文件包含它的實(shí)現(xiàn)。編譯器將在編譯時(shí)將所有分部合并為一個(gè)。
它要求包括分部方法的簽名,但不需要提供實(shí)現(xiàn)。如果調(diào)用但未實(shí)現(xiàn)該方法,則不會(huì)有編譯時(shí)或運(yùn)行時(shí)錯(cuò)誤。
分部方法必須使用partial關(guān)鍵字,并且必須返回void。
分部方法可以有in 或 ref沒(méi)有out參數(shù)。
分部方法是隱式私有方法,因此不能是虛方法。
分部方法可以是靜態(tài)方法。
分部方法可以是泛型方法。