Olá pessoal, tudo bem?
Tudo muito agitado por aqui, mas voltei a dar atenção ao blog finalmente!! E além de continuar postando sobre Silverlight, Windows Phone 7, vou continuar mostrando alguns truques que podemos utilizar no C#, como os operadores pouco utilizados que já mostrei aqui e aqui.
Hoje vou falar sobre a keyword partial.
Com a keyword partial conseguimos dividir uma mesma classe, struct ou interface em mais de um arquivo. Mas quando o projeto é compilado e o código gerado, esses arquivos são “mesclados”. Quem trabalha com Windows Forms e ainda não viu, veja que um formulário é dividido em vários arquivos mas utilizando partial.
Dividir as classes em vários arquivos, pode ser útil em projetos ou classes grandes, não preciso abrir aquela classe com 100 métodos (alguém tem algo assim?
), ou como eu mostrei aqui no exemplo onde utilizo validação com DataAnnotations no LINQ To SQL só consigo fazer esse tipo de “truque” graças as classes parciais.
Bom chega de falar e vamos aos exemplos que é muito melhor.
Uma classe Calculadora com 4 métodos simples.
class Calculadora
{
public int Somar(int valor1, int valor2)
{
return valor1 + valor2;
}
public int Diminuir(int valor1, int valor2)
{
return valor1 - valor2;
}
public int Multiplicar(int valor1, int valor2)
{
return valor1 * valor2;
}
public int Dividir(int valor1, int valor2)
{
return valor1 / valor2;
}
}
Posso dividir essa classe em duas da seguinte forma.
partial class Calculadora
{
public int Somar(int valor1, int valor2)
{
return valor1 + valor2;
}
public int Diminuir(int valor1, int valor2)
{
return valor1 - valor2;
}
}
partial class Calculadora
{
public int Multiplicar(int valor1, int valor2)
{
return valor1 * valor2;
}
public int Dividir(int valor1, int valor2)
{
return valor1 / valor2;
}
}
Uma dúvida frequente, é se as classes precisam estar no mesmo Arquivo.cs, e a resposta é não, posso ter vários arquivos.cs com nomes diferentes contendo cada um, um pedaço da minha classe parcial.
Outro detalhe, é que para ele mesclar as classes, elas devem pertencer ao mesmo namespace.
Só para mostrar o código IL gerado, vemos que só existe uma classe Calculadora com os 4 métodos, mesmo dividindo o código em duas classes parciais.
E não tenho restrições quanto a herança e implementação de interfaces. Veja o código abaixo.
class PessoaFisica : Pessoa, IDisposable
{
public void Dispose()
{
throw new NotImplementedException();
}
}
Esse código poderia ser dividido da seguinte forma.
partial class PessoaFisica : Pessoa
{
}
partial class PessoaFisica : IDisposable
{
public void Dispose()
{
throw new NotImplementedException();
}
}
Uma keyword simples, que pode ser muito útil na organização de determinados projetos.
Abraços e até o próximo artigo.



