Entendendo Classes e Métodos Parciais em C#
Entendendo Classes e Métodos Parciais em C#
Este artigo explica como e por que desenvolvedores C# usam classes parciais e métodos parciais para gerenciar grandes bases de código, colaborar efetivamente e otimizar compilação.
Quando múltiplos desenvolvedores trabalham em uma única classe extensa, ou quando você precisa mesclar código escrito à mão com código gerado por ferramentas como Visual Studio, a palavra-chave partial do C# oferece uma solução limpa.
O que é uma Classe Parcial?
Uma classe parcial permite dividir a definição de uma única classe em dois ou mais arquivos de origem. Cada arquivo contém um fragmento da classe, e o compilador os costura juntos no tempo de build. A palavra-chave partial deve aparecer em cada parte da classe.
Exemplo 1 – Dividindo uma Classe Simples
Considere um projeto chamado InfoAlturaPeso que armazena altura e peso de uma pessoa.
namespace InfoAlturaPeso { public partial class Registro { private int a; private int p; public Registro(int a, int p) { this.a = a; this.p = p; } } }
A mesma classe Registro é continuada em um segundo arquivo.
namespace InfoAlturaPeso { public partial class Registro { public void ImprimirRegistro() { Console.WriteLine("Altura:" + a); Console.WriteLine("Peso:" + p); } } }
Finalmente, o programa que usa a classe parece com isto:
namespace InfoAlturaPeso { class Program { static void Main(string[] args) { Registro meuRegistro = new Registro(10, 15); meuRegistro.ImprimirRegistro(); Console.ReadLine(); } } }
O compilador mescla as duas definições de Registro em uma única classe que contém tanto o construtor quanto o método ImprimirRegistro.
Quando Usar Classes Parciais
- Projetos grandes com múltiplos desenvolvedores: Cada membro da equipe pode editar um arquivo separado sem conflito.
- Código auto-gerado: IDEs frequentemente criam arquivos que não devem ser editados manualmente; classes parciais permitem adicionar lógica personalizada sem modificar código gerado.
Pontos-Chave para Lembrar
- A palavra-chave
partialdeve aparecer em todo arquivo que contribui para a classe. - Todas as partes devem residir no mesmo namespace e ser compiladas juntas.
- Todas as partes devem compartilhar o mesmo modificador de acesso (ex:
public,internal). - Se qualquer parte declarar a classe como
abstractousealed, a classe inteira herda esse atributo. - Todos os membros definidos em qualquer parte são visíveis para todas as outras partes.
- Modificadores parciais não são permitidos em delegates ou enumerações.
O que é um Método Parcial?
Um método parcial é um tipo especial de método que pode ser declarado em uma parte de uma classe parcial e opcionalmente implementado em outra. Se a implementação for omitida, tanto a declaração do método quanto quaisquer chamadas a ele são descartadas no tempo de compilação, o que pode melhorar performance.
Exemplo 2 – Usando Métodos Parciais
Em arquivo1.cs, a classe Carro declara um método parcial e outros métodos regulares.
public partial class Carro { partial void InicializarCarro(); public void ConstruirAro() { } public void ConstruirRodas() { } }
Em arquivo2.cs, a mesma classe Carro fornece a implementação para InicializarCarro e adiciona outro método.
public partial class Carro { public void ConstruirMotor() { } partial void InicializarCarro() { string str = "Carro"; } }
Declarações de métodos parciais consistem em duas partes: a assinatura em um arquivo e a implementação opcional no mesmo ou outro arquivo.
Regras para Métodos Parciais
- Devem ser declarados com a palavra-chave
partial. - Tipo de retorno é sempre
void(sem valor de retorno). - Implícitamente
private; não podem serpublic,protectedouinternal. - Não podem ser declarados
virtual,overrideouabstract. - Se nenhuma implementação for fornecida, o compilador remove o método e quaisquer chamadas a ele.
Linguagem C
- Classes e Objetos em C#: Fundamentos para POO Robusta
- Dominando Classes e Métodos Abstratos em C#: Guia Prático
- Dominando Classes e Métodos Sealed em C#: Quando Usar, Exemplos Claros e Segurança de Código
- Classes e Objetos em C++: Guia Prático de Programação Orientada a Objetos
- Funções Amigas e Classes Amigas em C++: Dominando o Controle de Acesso
- Dominando Java: Entendendo Objetos, Classes e Conceitos Fundamentais de POO
- Dominando Herança em C#: Construa Código Reutilizável e Manutenível
- Polimorfismo em C#: Binding Estático vs Dinâmico Explicado
- ASTM A729 Classe A: Aço Duplamente Normalizado e Revenido - Propriedades e Normas
- ASTM A649 Classe 2: Aço Normalizado e Revenido - Especificações e Propriedades