Desenvolvimento - C#

.NET 2.0 – 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. veja mais neste artigo.

por Cleber Dantas



INTRODUÇÃO

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.

Agora 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, de 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;
           }
    }
}

Agora 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());
    }

Agora 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 fiscos 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 instancia da classe atribuindo um valor a 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 - Ministra palestras e mini-cursos, MSP (Microsoft Student Partner), MCAD (Microsoft Certified Application Developer) e MCTS (Microsoft certified Technology Specialist). Membro do comitê Web/Infra do INETA Brasil (International .NET Association), colaborador do Portal Linha de código e IMasters. Trabalha com a plataforma .NET desde 2003.