English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Em C#, é possível usar a palavra-chave partial para dividir a implementação de classes, estruturas, métodos ou interfaces em vários arquivos .cs. Durante a compilação, o compilador combina todas as implementações provenientes de vários arquivos .cs.
Veja os arquivos employeeprops.cs e employeemethods.cs que contêm a 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("Salvo!"); } }
Acima, EmployeeProps.cs contém as propriedades da classe Employee, enquanto employeememethods.cs contém todos os métodos da classe Employee. Essas classes serão compiladas em uma 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("Salvo!"); } }
Todas as definições de classes parciais devem estar no mesmo assembly e no mesmo namespace.
Todas as partes devem ter a mesma acessibilidade, por exemplo, pública ou privada.
Se qualquer parte for declarada como abstrata, sealed ou base type, então toda a declaração da classe será do mesmo tipo.
Diferentes partes podem ter diferentes tipos básicos, portanto, a classe final herdará todos os tipos básicos.
O modificador partial pode apenas aparecer antes das palavras-chave class, struct ou interface.
Permite a nesting de tipos parciais.
As classes ou estruturas parciais podem conter um método, que pode ser dividido em dois arquivos .cs separados de uma classe ou estrutura parcial. Um dos arquivos .cs deve conter a assinatura do método, enquanto os outros arquivos podem conter a implementação opcional do método parcial. A declaração e implementação do método devem conter a palavra-chave 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(); } }
Acima, o arquivo employeeprops.cs contém a assinatura do método DisplayEmployeeInfo, enquanto o arquivo employeemethods.cs contém sua implementação. O compilador combinará todos os partes em um único arquivo durante a compilação.
Ele requer incluir a assinatura do método parcial, mas não é necessário fornecer a implementação. Se o método for chamado mas não implementado, não haverá erros de compilação ou tempo de execução.
Os métodos parciais devem usar a palavra-chave partial e devem retornar void.
Os métodos parciais podem ter parâmetros in ou ref sem parâmetros out.
Os métodos parciais são métodos privados implícitos, portanto, não podem ser métodos virtuais.
Os métodos parciais podem ser métodos estáticos.
Os métodos parciais podem ser métodos genéricos.