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 Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>