segunda-feira, 12 de março de 2007

Propriedades em C#

Edit: Corrigi o código C# abaixo - estava com diferença de caixa entre os nomes... Assim não dá, né... hehe foi mal

Olá a todos.

Neste post vou mostrar um pouco sobre propriedades e sua implementação em C#.

De modo geral, propriedades são elementos de uma classe que são usados para encapsular campos de dados dentro desta classe - uma interface para quem está "fora" recuperar e alterar o valor de um campo da classe.

Vou mostrar alguns exemplos de propriedades em outras linguagens:

Delphi:

type
TObj = class

private
FCampo: String;

published
property Campo: String read FCampo write FCampo;
end;

Acessamos a propriedade assim:

// instanciando a classe
Obj = TObj.Create;

// definindo valor
Obj.Campo := 'Valor da propriedade';

// recuperando valor
variavel := obj.Campo;

Em Java:

class Obj {

private string campo;

public void setCampo(string value) {
this.campo = value;
}

public string getCampo() {
return this.campo;
}
}

Usando:

// instanciando a classe
Obj obj = new Obj();

// definindo valor
obj.setCampo("Valor da propriedade");

// recuperando valor
string variavel = obj.getCampo();

Parece que o java não tem suporte intrínseco a propriedades - não tenho certeza. De qualquer forma, temos que encapsular os campos em métodos públicos da classe. O Delphi já tem uma forma mais elegante de implementar :D

Em C# propriedades são extensões de campos de dados. Também são conhecidos na cominidade C# como smart fields (campos inteligentes). Hehe... Nome legal...

Vamos ver na prática:

class Obj {

private string campo;

public string campo {
get {
return campo;
}
set {
campo = value;
}
}
}

Repararam que o nome do campo interno e da propriedade são os mesmos? Legal, né...
E no código usamos assim:

// instanciando a classe
Obj obj = new Obj();

// definindo valor
obj.campo = "Valor da propriedade";

// recuperando valor
string propriedade = obj.campo;

A forma de acessar propriedades no C# é bem semelhante à do Delphi. Em java já é um pouco diferente. <comentario relevante="false">Na verdade, eu acho a de java a mais feia de todas hehe</comentario>.

Valeu pela força de todos no blog e, como sempre, não deixem de comentar.

2 comentários:

  1. O Java nesse ponto, realmente fica prolixo. Precisa de um método "set" e um "get" para interface dos campos privados.
    Ao passo que o Delphi e o C# implementam plenamente o conceito de propriedades de um objeto. Provendo uma única interface de i\o para a classe.
    O irônico nessa história, e também o que considero mais grave, é que o Java é amplamente conhecido pelo seu suporte a orientação a objetos. Contudo, neste exemplo podemos observar que ela apresenta uma franqueza na implementação de um conceito tão elementar deste paradigma.

    ResponderExcluir
  2. Pode crer...

    Eu achei muito maneira a maneira de implementar do C#. Do que eu venho estudando esta linguagem estou gostando muito :)

    ResponderExcluir