English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In C#, è possibile utilizzare la parola chiave partial per dividere l'implementazione di classi, strutture, metodi o interfacce in più file .cs. Durante la compilazione del programma, il compilatore unisce tutte le implementazioni provenienti da più file .cs.
Vediamo i file employeeprops.cs e employeemethods.cs che contengono la classe Employee.
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("Salvato!"); } }
Sopra, EmployeeProps.cs contiene le proprietà della classe Employee, mentre employeememethods.cs contiene tutti i metodi della classe Employee. Queste classi saranno compilate in una classe 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("Salvato!"); } }
Tutte le definizioni delle classi parziali devono essere nel medesimo assembly e namespace.
Tutte le parti devono avere la stessa visibilità, ad esempio pubblica o privata.
Se qualsiasi parte è dichiarata come astratta, sealed o basata, l'intera dichiarazione della classe è dello stesso tipo.
Diversi metodi parziali possono avere diversi tipi di base, quindi la classe finale erediterà tutti i tipi di base.
Il modificatore partial può apparire solo prima delle parole chiave class, struct o interface.
Permette di utilizzare tipi parziali annidati.
Le classi o le strutture parziali possono contenere un metodo, che può essere diviso in due file .cs separati della classe o della struttura. Uno dei due file deve contenere la firma del metodo, mentre l'altro può contenere l'implementazione opzionale del metodo parziale. La dichiarazione e l'implementazione del metodo devono avere la parola chiave 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(); } }
Sopra, il file employeeprops.cs contiene la firma del metodo DisplayEmployeeInfo, mentre il file employeemethods.cs contiene la sua implementazione. Il compilatore li unirà in uno solo durante la compilazione.
Richiede di includere la firma del metodo parziale, ma non è necessario fornire l'implementazione. Se il metodo viene chiamato ma non è implementato, non ci saranno errori di compilazione o di esecuzione.
I metodi parziali devono utilizzare la chiave parziale e devono restituire void.
I metodi parziali possono avere parametri in o ref senza parametri out.
I metodi parziali sono metodi implicitamente privati, quindi non possono essere metodi virtuali.
I metodi parziali possono essere metodi statici.
I metodi parziali possono essere metodi generici.