Dotstore
Canais iMasters

.NET + Visual Studio

Entendendo Partial Types (Partial Class)

Partial Types é uma nova feature introduzida no Visual Studio 2005. Esta feature ajuda você a dividir seus tipos tais como classes e interfaces através de múltiplos arquivos. Atualmente, quando escrevemos nossas classes, é necessário ter a classe em um único arquivo, ou seja, você precisa iniciar e terminar a classe no mesmo arquivo físico. No Visual Studio 2005, você tem a opção de separar o código de uma classe através de vários arquivos físicos.

Partial Class

Partial class nada mais é do que aplicarmos o conceito de partial types numa classe. Quando se é compilada uma partial class (classe parcial) no VS 2005, o compilador simplesmente agrupa todas os arquivos da classe parcial e o torna uma entidade única.

Para usarmos Partial Class devemos usar a KEYWORD 'partial', veja o exemplo:

Arquivo1.cs

public partial class ClasseParcial
{
public ClasseParcial()
{
//Construtor
}

public string Metodo1()
{
//Implementação
}
}

Arquivo2.cs

public partial class ClasseParcial
{
public string Metodo2()
{
//Implementação
}
}

Listagem1: Código usando Partial Class

Na listagem1, vemos uma classe chamada ClasseParcial onde temos um construtor e dois métodos sem implementação. Agora, note que o construtor e o primeiro método estão em um arquivo (Arquivo1.cs) e o segundo método está em outro arquivo (Arquivo2.cs) e, claro, o uso da KEYWORD 'partial' em ambos os arquivos.

Vamos ver o mesmo exemplo da listagem1, sem o uso de Partial Class:

public class ClasseParcial
{
public ClasseParcial()
{
//Construtor
}

public string Metodo1()
{
//Implementação
}

public string Metodo2()
{
//Implementação
}
}

Listagem2: Listagem1 sem uso de Partial Class

O que vemos na Listagem2 é uma classe comum de nosso dia-a-dia e é exatamente o que ocorre com o código da Listagem1 depois da compilação, ou seja, o compilador agrupa todas as classes parciais de forma que fique dessa maneira, isto é, vire uma única classe. Claro que isso é transparente para nós desenvolvedores.

Obs: Em visual Basic .NET não há a necessidade de colocar a KEYWORD 'partial' no primeiro arquivo da classe parcial, aliás, por Default o Visual Studio não coloca, veja o exemplo:

Arquivo1.vb

Public Class ClasseParcial
Public Sub Metodo1()
'Implementação
End Sub
End Class

Arquivo2.vb

Partial Public Class ClasseParcial
Public Sub Metodo2()
'Implementação
End Sub
End Class

Listagem3: Exemplo em Visual Basic .NET

Partial Class no Visual Studio 2005

Agora vamos ver onde o Visual Studio 2005 usa o conceito de Partial Class, veja a figura a seguir:


Figura1: Aplicação Windows no Visual Studio 2005.

Na figura acima, vemos na Solution Explorer dois arquivos: o 'Form1.cs' e 'Form1.Designer.cs'. E é ai que o conceito de Partial Class entra no Visual Studio 2005.

No segundo arquivo 'Form1.Designer.cs' é onde fica armazenado todo código gerado pelo próprio Visual Studio 2005, por exemplo, quando adicionamos controles ao nosso Form, esses códigos são colocados nesse arquivo para que o código do primeiro arquivo(Form.cs) fique mais limpo, assim evitando erros.

A imagem a seguir mostra o arquivo 'Form1.Designer.cs' depois de terem sido adicionados dois 'Label' e dois 'TextBox':


Figura2: Código gerado no arquivo 'Form1.Designer.cs'.

Alguns benefícios

Bom, logo de cara podemos ver que todo código gerado pelo 'designer' do Visual Studio fica em um arquivo separado, assim evitando possíveis erros por parte do programador. Agora, outra coisa muito interessante é que como podemos trabalhar com arquivos separados, uma equipe de desenvolvimento pode trabalhar funcionalidades diferentes de uma mesma classe ao mesmo tempo sem precisar compartilhar o mesmo arquivo físico.

Um exemplo prático

Abra o Visual Studio 2005 e crie um novo projeto do tipo Windows Applicaton utilizando a linguagem C#. Dentro do projeto crie uma pasta chamada 'Classes', botão direito em cima da pasta e adicione duas classes. Dê o nome para a primeira de 'Arquivo1.cs' e 'Arquivo2.cs' para a segunda, sua estrutura deve ficar assim:


Figura3: Estrutura da aplicação.

Agora, no arquivo1, digite o código a seguir:

using System;
using System.Collections.Generic;
using System.Text;

namespace ExemploPartialClass.Classes
{
public partial class ClasseTeste
{

private string _mensagem;

public string Mensagem
{
get { return _mensagem; }
set { _mensagem = value; }
}
}
}

E no arquivo2 digite:

using System;
using System.Collections.Generic;
using System.Text;

namespace ExemploPartialClass.Classes
{
public partial class ClasseTeste
{
public string ExibeMensagem()
{
return Mensagem;
}
}
}

No evento Load do Form1 faça:

private void Form1_Load(object sender, EventArgs e)
{
Classes.ClasseTeste MyPartialClass = new Classes.ClasseTeste();
MyPartialClass.Mensagem = "Testando minha classe parcial!!!";
MessageBox.Show(MyPartialClass.ExibeMensagem());
}

Execute sua aplicação (F5) e verá que quando o form é carregado a mensagem "Testando minha classe parcial" é exibida.


Figura4: Mensagem sendo exibida.

Analisando o que foi feito

Criamos dois arquivos físicos distintos 'Arquivo1' e 'Arquivo2', porém usamos o conceito de partial class, ou seja, os dois arquivos fazem parte da mesma classe. No primeiro arquivo (Arquivo1.cs), declarei um membro privado do tipo string chamado '_mensagem' e criei uma propriedade (Property) que expõe esse membro privado.

Já no segundo arquivo (Arquivo2.cs), criei um método que retorna o valor contido dentro da propriedade e no Form1 criei uma instância da classe atribuindo um valor à propriedade 'Mensagem' e, posteriormente, exibindo uma mensagem na tela fazendo uso do método 'ExibeMensagem', ou seja, podemos ver que tudo funciona perfeitamente.

Dica: É interessante, por exemplo, colocarmos todas as Propetys de nossa classe num arquivo e todos os métodos em outro para assim podermos nos organizar melhor.

Conclusão

O Visual Studio 2005 nos trouxe muitas novidades, entre elas a possibilidade de podermos dividir nossas classes em diversos arquivos com o uso de partial class, como foi visto nesse artigo, isso realmente é um grande avanço e um facilitador na hora de desenvolver, faça uso e aproveite mais essa!

Cleber Dantas

Cleber Dantas

é especialista em desenvolvimento web. Atua há 7 anos no mercado de TI registrando passagens por empresas de consultoria, software houses e internet. Adepto ao desenvolvimento ágil de software, possuí as certificações MCAD e MCTS. É palestrante em eventos da comunidade técnica Microsoft (MS Dev Day, MsTechDay, MVC Summit, Saturday Fast Code, TechEd Brasil entre outros). Ministra cursos e workshops sobre tecnologias de desenvolvimento Microsoft. Colaborador dos portais iMasters, Linha de Código e DevMedia. Gosta de escrever sobre ASP.NET (principalmente MVC =D), IIS, desenvolvimento Web em geral, mercado, testes e boas práticas.


Comente também

1 Comentário

cassio
cassio

Partial Class foi uma forma da MS retardar um fmk puro para a plataforma .net, obrigando assim a unir uma página .aspx ao code-behind. Simples não!

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.
KingHost

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize