Pergunta rápida: Quando você decide usar propriedades (em C #) e quando você decide usar métodos?
Estamos ocupados com esse debate e encontramos algumas áreas em que é discutível se devemos usar uma propriedade ou um método. Um exemplo é este:
public void SetLabel(string text)
{
Label.Text = text;
}
No exemplo, Label
é um controle em uma página ASPX. Existe um princípio que possa governar a decisão (neste caso) de tornar isso um método ou uma propriedade.
Aceito a resposta que é mais geral e abrangente, mas que também toca no exemplo que dei.
c#
properties
methods
Trumpi
fonte
fonte
if()
verificações (conforme o MSDN). Mas isso é complicado, pois o usuário nem sempre está ciente do custo de processamento por trás do acesso a uma variável (propriedade) (ou seja, o código não está disponível) e, por razões de rigor, é necessário fazer um benchmark da propriedade. Ah, e um "bônus" que você não pode usar ponteiros com propriedades.Respostas:
Na seção Escolhendo entre propriedades e métodos das Diretrizes de design para o desenvolvimento de bibliotecas de classes:
fonte
Sim, se tudo o que você está fazendo é obter e configurar, use uma propriedade
Se você estiver fazendo algo complexo que pode afetar vários membros dos dados, um método é mais apropriado. Ou se o seu getter usa parâmetros ou se ele usa mais do que um parâmetro de valor.
No meio, há uma área cinza onde a linha pode ficar um pouco embaçada. Não existe uma regra rígida e rápida e pessoas diferentes às vezes discordam se algo deve ser uma propriedade ou um método. O importante é apenas ser (relativamente) consistente com a maneira como você faz (ou como sua equipe faz).
Eles são amplamente intercambiáveis, mas uma propriedade sinaliza ao usuário que a implementação é relativamente "simples". Ah, e a sintaxe é um pouco mais limpa.
De um modo geral, minha filosofia é que, se você começar a escrever um nome de método que comece com get ou set e aceite zero ou um parâmetro (respectivamente), é o principal candidato para uma propriedade.
fonte
As propriedades são uma maneira de injetar ou recuperar dados de um objeto. Eles criam uma abstração sobre variáveis ou dados dentro de uma classe. Eles são análogos aos getters e setters em Java.
Métodos encapsulam uma operação.
Em geral, uso propriedades para expor bits únicos de dados ou pequenos cálculos em uma classe, como imposto sobre vendas. Que é derivado do número de itens e seu custo em um carrinho de compras.
Uso métodos ao criar uma operação, como recuperar dados do banco de dados. Qualquer operação que possua partes móveis é candidata a um método.
No seu exemplo de código, eu o envolveria em uma propriedade se precisar acessá-lo fora da classe que contém:
Configurando o texto:
Se eu estivesse apenas configurando a propriedade Text do Label, é assim que eu faria:
Configurando o texto:
fonte
Se você estiver definindo uma propriedade real do seu objeto, use uma propriedade.
Se você estiver executando uma tarefa / funcionalidade, use um método.
No seu exemplo, é uma propriedade definida sendo definida.
Se, no entanto, sua funcionalidade era AppendToLabel, você usaria um método.
fonte
Pesquisando no MSDN, encontrei uma referência em Propriedades vs Métodos que fornece ótimas diretrizes para a criação de métodos:
fonte
Você só precisa olhar para o próprio nome ... "Propriedade". O que isso significa? O dicionário o define de várias maneiras, mas, neste caso, "um atributo essencial ou distintivo ou a qualidade de uma coisa" se encaixa melhor.
Pense sobre o objetivo da ação. Você está, de fato, alterando ou recuperando "um atributo essencial ou distintivo"? No seu exemplo, você está usando uma função para definir uma propriedade de uma caixa de texto. Isso parece meio bobo, não é?
Propriedades são realmente funções. Todos eles são compilados para getXXX () e setXXX (). Apenas os esconde no açúcar sintático, mas é o açúcar que fornece um significado semântico ao processo.
Pense em propriedades como atributos. Um carro tem muitos atributos. Cor, MPG, Modelo, etc. Nem todas as propriedades são configuráveis, algumas são calculáveis.
Enquanto isso, um método é uma ação. GetColor deve ser uma propriedade. GetFile () deve ser uma função. Outra regra prática é que, se não alterar o estado do objeto, deve ser uma função. Por exemplo, CalculatePiToNthDigit (n) deve ser uma função, porque na verdade não está alterando o estado do objeto Math ao qual está anexado.
Talvez esteja divagando um pouco, mas realmente se resume a decidir quais são seus objetos e o que eles representam. Se você não consegue descobrir se deve ser uma propriedade ou função, talvez não importa qual.
fonte
Simmanticamente propriedades são atributos de seus objetos. Métodos são comportamentos do seu objeto.
Label é um atributo e faz mais sentido torná-lo uma propriedade.
Em termos de programação orientada a objetos, você deve ter uma compreensão clara do que faz parte do comportamento e do que é apenas um atributo.
Carro {Cor, Modelo, Marca}
Um carro possui os atributos Cor, Modelo e Marca, portanto, não faz sentido ter um método SetColor ou SetModel porque, de forma símtica, não solicitamos que o Car defina sua própria cor.
Portanto, se você mapear a propriedade / método do caso para o objeto da vida real ou o examinar do ponto de vista simétrico, sua confusão realmente desaparecerá.
fonte
Também grande vantagem para Propriedades é que o valor da propriedade pode ser visto no Visual Studio durante a depuração.
fonte
Prefiro usar propriedades para adicionar / definir métodos com 1 parâmetro. Se os parâmetros forem maiores, use métodos.
fonte
As propriedades devem ser apenas um conjunto simples e obter um revestimento. Algo mais e realmente deve ser movido para um método. Código complexo sempre deve estar nos métodos.
fonte
Eu só uso propriedades para acesso a variáveis, ou seja, obter e configurar variáveis individuais ou obter e configurar dados nos controles. Assim que qualquer tipo de manipulação de dados é necessário / realizado, eu uso métodos.
fonte
Por uma questão de design, as propriedades representam dados ou atributos do objeto de classe, enquanto os métodos são ações ou comportamentos do objeto de classe.
No .Net, mundo, existem outras implicações do uso de Propriedades:
Equívocos (IMHO) sobre o uso das Propriedades:
No exemplo aqui, poderia ter sido escrito, com mais significado comercial como:
fonte
As propriedades são muito boas porque são acessíveis no designer visual do visual studio, desde que tenham acesso.
Eles costumam ser usados quando você está apenas configurando e obtendo e, talvez, alguma validação que não acessa uma quantidade significativa de código. Cuidado, pois a criação de objetos complexos durante a validação não é simples.
Qualquer outra coisa é a maneira preferida.
Não se trata apenas de semântica. O uso inadequado das propriedades começa a ocorrer estranheza no designer visual do visual studio.
Por exemplo, eu estava obtendo um valor de configuração dentro de uma propriedade de uma classe. A classe de configuração realmente abre um arquivo e executa uma consulta sql para obter o valor dessa configuração. Isso causou problemas no meu aplicativo, onde o arquivo de configuração seria aberto e bloqueado pelo próprio visual studio, e não pelo meu aplicativo, porque não estava apenas lendo, mas escrevendo o valor da configuração (através do método setter). Para consertar isso, eu apenas tive que alterá-lo para um método.
fonte
Aqui está um bom conjunto de diretrizes para quando usar propriedades versus métodos de Bill Wagner
Chamadas repetidas para o configurador (com o mesmo valor) não devem produzir diferença em uma única chamada.
O get não deve retornar uma referência às estruturas de dados internas (consulte o item 23). Um método pode retornar uma cópia detalhada e evitar esse problema.
* Retirado da minha resposta para uma pergunta duplicada.
fonte
Isto é simples.
1: use a propriedade quando desejar que seus dados sejam validados antes de serem armazenados no campo. Portanto, dessa maneira, a propriedade fornece encapsulamento para seus campos. Como se você deixar seus campos, o usuário final público poderá atribuir qualquer valor que possa ou não ser válido de acordo com os requisitos de seus negócios, como a idade deve ser maior que 18. Portanto, antes que o valor seja armazenado no campo correspondente, precisamos verificar sua validade. Dessa maneira, as propriedades representam dados.
2: Use o método quando desejar executar alguma ação, como se você estivesse fornecendo alguns dados como parâmetro e seu método está processando com base nos valores fornecidos e retornando o valor processado como saída. Ou você deseja alterar o valor de algum campo por esse cálculo. "Desta forma, o método representa ação".
fonte
Eu venho de java e eu usei get .. set .. método por um tempo.
Quando escrevo código, não pergunto: "acessar esses dados é simples ou requer um processo pesado?" porque as coisas podem mudar (hoje, recuperar essa propriedade é simples, amanhã pode exigir algum ou mais processo).
Hoje eu tenho um método SetAge (int idade) amanhã também terei o método SetAge (data de nascimento) que calcula a idade usando a data de nascimento.
Fiquei muito decepcionado com o fato de o compilador transformar a propriedade em get e set, mas não considera meus métodos Get ... e Set .. os mesmos.
fonte