Criando propriedades para classes no VB .NET

No post de hoje trago algo que abordei ligeiramente na vídeo aula Como carregar um ComboBox de maneira bem fácil, que são as propriedades de uma classe. Como bom objeto, as classe que você cria tem propriedades, como uma propriedade qualquer de um objeto qualquer. Cito aqui, por exemplo, a propriedade .Text do objeto TextBox.

Conceito dass Propriedade

É algo muito simples, porém, essencial para abordar um dos aspectos da Orientação a Objetos, que é o encapsulamento. Criando um classe e definindo suas propriedades, esses dados podem ser tratados dentro dessa classe mantendo a integridade que fora definida para cara propriedade.

Algo que deixa bastante claro essa questão do encapsulamento, são as propriedades de posicionamento de um formulário de uma aplicação em VB.NET ou C#. Você pode, por exemplo, resgatar a coordenada x de um formulário utilizando o comando:

MessageBox.Show(Formulario.Location.X)

Entretanto, ao tentar entrar com um valor para tal propriedade, receberá um mensagem de erro informando que isso não é possível. Para tanto, é necessário criar um nova localização, informando tanto x quanto y. O que é feito quanto isso acontece, fica por conta da regra utilizada para o deslocamento de um formulário, ou seja, o encapsulamento garante, tanto que os dados passados sejam tratadas da maneira correto, quanto protege a integridade da propriedade.

Criando propriedades para classes

Vamos agora ver exatamente como criar as propriedades. Abaixo está o código para a criação de duas propriedades para a classe que chamei de Dados. Em seguida explico o código.

Public Class Dados
    Private _Nome As String
    Private _ID As Integer

    Public Property Nome() As String
        Get
            Return _Nome
        End Get
        Set(ByVal value As String)
            _Nome = value
            _ID = New Random().Next(1, 10000)
        End Set
    End Property

    Public ReadOnly Property Identificador() As Integer
        Get
            Return _ID
        End Get
    End Property
End Class

Acima temos dois tipos bem diferentes de propriedades. A primeira, Nome, tanto pode ser utilizada para atribuir um valor via instancia, quanto pode  ter seu valor lido. Já a segunda, só pode ter o seu valor lido. A segui, explico linha a linha o que está acontecendo.

Linha 1: declaração da classe Dados;

Linhas 2 e 3: são declaradas duas variáveis que serão utilizadas para armazenar os valores atribuídos às propriedades;

Linha 5: declaro a primeira propriedade, Nome, ela é pública e do tipo String;

Linhas 6, 7 e 8: utilizo o comando Get para informar o que deve ser feito quanto o tentarem ler o que está na propriedade. Neste caso, somente retorno o que fora atribuído. Poderia por exemplo, aplicar a função Trim,  Replace ou mesmo ToUpper, como a propriedade pertence a classe pode ser feito qualquer coisa, inclusive retornar sempre uma String vazia;

Linhas 9, 10, 11 e 12: utilizo o comando Set, para criar os procedimentos que devem ser realizados quando for atribuído um valor à propriedade. Neste caso, simplesmente passo o valor que for atribuído, para a variável que criei anteriormente. Na declaração, é criado um parâmetro, que deve ser do mesmo tipo da propriedade. Mas, uma coisa interessante que adicionei, é que quando for atribuído um nome, a propriedade ID recebe um valor aleatório (entre 1 e 10000);

Linha 13: finalizo a declaração da propriedade Nome;

Linha 15: declaro a propriedade ID, publica do tipo Integer. Porém, diferente da anterior, adicionei a instrução ReadOnly, informando que não pode ser atribuído valor a esta variável por meio de uma instância da classe.

Linhas 16, 17 e 18: utilizo o comando Get para informar o que deve ser feito quanto o tentarem ler o que está na propriedade.

Linha 19: finalizo a declaração da propriedade ID;

Linha 20: finalizo o código da classe;

No momento que a classe for instanciada, ocorreria o seguinte:Classe criada quando instanciadaVeja que conseguimos atribuir um valor à propriedade Nome, porém, quando tentamos com o Identificador, é informado que esta propriedade é somente leitura.

E como resultado disso tudo, corrigindo o erro, temos:

Resultado do código

E dessa forma, você pode trabalhar suas classes, criando regras de negócios para seu sistema e mantendo a integridades dos dados.

Até um próxima!