Pergunta

Na NET, se uma classe contém um membro que é um objeto de classe, deve esse membro ser exposto como uma propriedade ou um método?

Foi útil?

Solução

Se tudo que você está fazendo é expor uma instância de objeto que é relevante para o estado do objeto atual você deve usar uma propriedade.

Um método deve ser usado quando você tem alguma lógica que está fazendo mais do que acessar um no objeto de memória e retornando esse valor ou quando você estiver executando uma ação que tem um amplo efeito sobre o estado do objeto atual.

Outras dicas

Você deve usar as propriedades para qualquer coisa que representa conceitualmente o estado do objeto, desde que sua recuperação não é uma operação cara o suficiente para que você deve evitar usá-lo repetidamente.

A partir MSDN :

Classe designers de biblioteca, muitas vezes tem de decidir entre implementar um membro da classe como uma propriedade ou um método. Em geral, os métodos representam acções e propriedades representam dados. Use as seguintes diretrizes para ajudá-lo a escolher entre essas opções.

  • Use uma propriedade quando o membro é um membro de dados lógico. Nas seguintes declarações do membro, nome é uma propriedade porque é um membro lógica da classe.

    public string Name
    get 
    {
        return name;
    }
    set 
    {
        name = value;
    }
    
  • Use um método quando:

    • A operação é uma conversão, tal como Object.ToString.
    • A operação é bastante caro que você quer se comunicar com o usuário que eles devem considerar cache o resultado.
    • A obtenção de um valor de propriedade usando o acessor get teria um efeito colateral observável.
    • Chamando o membro duas vezes consecutivas produz resultados diferentes.
    • A ordem de execução é importante. Note-se que as propriedades de um tipo deve ser capaz de ser definido e recuperadas em qualquer ordem.
    • O membro é estático, mas retorna um valor que pode ser alterado.
    • O membro retorna uma matriz. Propriedades que retornam matrizes pode ser muito enganador. Geralmente é necessário para retornar uma cópia da matriz interna para que o usuário não pode alterar o estado interno. Isso, juntamente com o fato de que um usuário pode facilmente assumir que é uma propriedade indexada, leva a código ineficiente. No exemplo de código a seguir, cada chamada para a propriedade Métodos cria uma cópia da matriz. Como resultado, 2n + 1 cópias da matriz vai ser criado no seguinte ciclo.

      Type type = // Get a type.
      for (int i = 0; i < type.Methods.Length; i++)
      {
         if (type.Methods[i].Name.Equals ("text"))
         {
            // Perform some operation.
         }
      }
      

O exemplo seguinte ilustra o uso correcto das propriedades e métodos.

    class Connection
    {
       // The following three members should be properties
       // because they can be set in any order.
       string DNSName {get{};set{};}
       string UserName {get{};set{};}
       string Password {get{};set{};}

       // The following member should be a method
       // because the order of execution is important.
       // This method cannot be executed until after the 
       // properties have been set.
       bool Execute ();
    }

Isso é irrelevante para o assunto.

Deve ser uma propriedade se o valor for algum detalhe sobre o estado do objeto.

Deve ser Method se realiza alguma ação no objeto.

Propriedade. A propriedade é basicamente apenas um método 'barato'. Obter ou definir uma referência a um objeto é muito barato.

Só para esclarecer, as propriedades são geralmente suposto representar o estado interno de um objeto. No entanto, a implementação de um membro de uma propriedade ou método informa ao usuário o quão caro é provável que seja a chamada.

Propriedades ler e valores atribuir a casos dentro de uma classe.

Métodos de fazer alguma coisa com os dados atribuídos à classe.

Resumo

Geralmente, as propriedades armazenar dados para um objeto, como Nome , e métodos são ações que um objeto pode ser solicitado a executar, como Mover ou Mostrar . Às vezes não é óbvio que os membros da classe devem ser propriedades e que deve ser métodos - os item método de uma classe de coleção (VB) armazena e recupera dados e pode ser implementada como uma propriedade indexada. Por outro lado, também seria razoável para implementar Item como um método.

Sintaxe

Como um membro da classe que vai ser usado também poderia ser um fator preponderante para determinar se ele deve ser representado como uma propriedade ou um método. A sintaxe para recuperar informações de uma propriedade parametrizada é quase idêntica à sintaxe utilizada para um método implementado como uma função. No entanto, a sintaxe para a modificação de um tal valor é um pouco diferente.

Se você implementar o membro de uma classe como uma propriedade, você deve modificá-lo do valor desta maneira:

ThisObject.ThisProperty (Índice) = NewValue

Se o membro da classe é implementado como um método, o valor a ser modificado deve ser modificado usando um argumento:

ThisObject.ThisProperty (Index, NewValue)

erros

Uma tentativa de atribuir um valor a uma propriedade só de leitura irá retornar uma mensagem de erro diferente do que uma chamada semelhante a um método. membros da classe corretamente implementadas retornar mensagens de erro que são mais fáceis de interpretar.

eu confuso sobre o uso da propriedade e método antes. Mas agora eu estou usando esta regra de acordo com MSDN Orientação :

métodos representam ações e propriedades representam dados. As propriedades são feitos para serem usados ??como campos, o que significa que as propriedades não devem ser computacionalmente complexa ou produzir efeitos colaterais. Quando ela não viola as diretrizes a seguir, considerar o uso de uma propriedade, em vez de um método, porque os desenvolvedores menos experientes encontrar propriedades mais fácil de usar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top