Carlos Mattos

C# 3.0 - Auto Implemented Properties

Introdução

Frequentemente os métodos de acesso às propriedades de uma classe (get/set) têm uma implementação trivial, seguindo um modelo simples, onde o acessor get é responsável por retornar o valor armazenado num campo privado da classe e o acessor set tem o propósito de atribuir um novo valor ao campo.

 

O novo recurso Auto Implemented Properties, disponível no C# 3.0, oferece uma sintaxe mais concisa para implementar esse modelo, onde o compilador C# gera automaticamente os campos privados. O exemplo a seguir o ajudará a entender esse novo recurso e seu impacto no dia-a-dia do programador.

 

Utilizando a versão beta do Visual Studio 2008 (se você ainda não baixou, acesse o link http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx) crie um novo projeto utilizando o template Console Application, atribua o nome desejado para a Solução, eu utilizarei o nome CSNewFeatures.

 

Na janela Solution Explorer, abra o arquivo Program.cs, e adicione uma nova classe chamada Movie, como demonstra o código abaixo:

 

namespace CSNewFeatures

{

    public class Movie

    {

    }

   

    class Program

    {

        static void Main(string[] args)

        {

        }

    }

}

 

Na nova classe Movie, adicione duas propriedades (Título e Gênero). E modifique o método ToString() da seguinte forma:

 

public class Movie

{

    public string Titulo { get; set; }

    public string Genero { get; set; }

 

    public override string ToString()

    {

        return Titulo + "\t" + Genero;

    }

}

 

Modifique o método Main da classe Program para criarmos uma nova instância da classe Movie, veja o código:

 

static void Main(string[] args)

{

  Movie m = new Movie();

  m.Titulo = "Em busca da felicidade";

  m.Genero = "Drama";

  

  Console.WriteLine(m);

  Console.ReadLine();

}

 

Execute a aplicação (CTRL+F5) para visualizar o resultado. Pressione qualquer tecla para finalizar a aplicação console e retornar para o ambiente de desenvolvimento do Visual Studio 2008.

 

Este modelo de construção requer que a propriedade tenha os dois métodos de acesso (get/set). Contudo, podemos atribuir modificadores de acesso para uma construção mais elaborada. Por exemplo, considere que você queira acrescentar uma propriedade (Codigo) que seja somente leitura (ReadOnly), para isto bastaria acrescentar o modificador private junto ao acessor set. Veja o código abaixo:

 

public class Movie

{

    public int Codigo { get; private set; }

    public string Titulo { get; set; }

    public string Genero { get; set; }

 

    public override string ToString()

    {

        return Codigo + "\t" + Titulo + "\t" + Genero;

    }

}

 

Neste caso, a propriedade código seria implementada somente para leitura. Desta forma, temos que realizar duas modificações, a primeira será acrescentarmos um construtor na classe Movie. Este construtor terá um argumento do tipo inteiro que será atribuído à nova propriedade Código quando uma nova instância da classe for criada. Confira o código a seguir:

 

public class Movie

{

    public string Codigo { get; private set; }

    public string Titulo { get; set; }

    public string Genero { get; set; }

 

    public Movie(int iCodigo)

    {

        Codigo = iCodigo;

    }

 

    public override string ToString()

    {

        return Codigo + "\t" + Titulo + "\t" + Genero;

    }

}

 

A segunda modificação será feita no método Main da classe Program para instanciarmos corretamente a classe Movie:

 

static void Main(string[] args)

{

    Movie m = new Movie(1);

    m.Titulo = "Em busca da felicidade";

    m.Genero = "Drama";

  

    Console.WriteLine(m);

    Console.ReadLine();

}

 

Execute novamente a aplicação para observar o resultado.

 

Conclusão

O novo recurso Auto Implemented Properties do C# 3.0 reduz a quantidade de código necessária para implementarmos as propriedades das nossas classes e torna o código mais claro. Com esta melhoria, os desenvolvedores ganharão produtividade significante para executar uma tarefa que é tão comum em todas aplicações.

 

Leave a Comment

(required) 

(required) 

(optional)
 

(required) 

If you can't read this number refresh your screen
Enter the numbers above: