English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In C# kann der Schlüsselwort 'partial' verwendet werden, um die Implementierung von Klassen, Strukturen, Methoden oder Interfaces in mehreren .cs-Dateien zu teilen. Beim Kompilieren des Programms merges der Compiler alle Implementierungen aus mehreren .cs-Dateien.
Sehen Sie sich die Dateien employeeprops.cs und employeemethods.cs an, die die Klasse Employee enthalten.
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!"); } }
Oben enthält EmployeeProps.cs die Eigenschaften der Klasse Employee, während employeememethods .cs alle Methoden der Klasse Employee enthält. Diese Klassen werden in eine Klasse Employee kompiliert.
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!"); } }
所有部分类定义必须位于同一程序集和命名空间中。
所有部分都必须具有相同的可访问性,例如公共或私有等。
如果任何部分声明为抽象、密封或基类型,那么整个类声明为相同的类型。
不同的部分可以具有不同的基本类型,因此最终类将继承所有基本类型。
部分修饰符只能出现在关键字class,struct 或 interface之前。
允许嵌套部分类型。
部分类或结构可以包含一个方法,该方法可以拆分为部分类或结构的两个单独的.cs文件。两个.cs文件中的一个必须包含方法的签名,其他文件可以包含部分方法的可选实现。方法的声明和实现都必须具有partial关键字。
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 文件包含它的实现。编译器将在编译时将所有部分合并为一个。
它要求包括部分方法的签名,但不需要提供实现。如果调用但未实现该方法,则不会有编译时或运行时错误。
部分方法必须使用partial关键字,并且必须返回void。
部分方法可以有in或ref参数,但没有out参数。
部分方法是隐式私有方法,因此不能是虚方法。
部分方法可以是静态方法。
部分方法可以是泛型方法。