Visão geral sobre propriedades

Um componente deve definir propriedades em vez de campos públicos, como os designers visuais como, por exemplo, Visual Studio exibem propriedades, mas não os campos, no navegador de propriedades. (Outros motivos convincentes para definir as propriedades são listados no final deste tópico).

As propriedades são como os campos inteligentes. Geralmente, uma propriedade tem um membro de dados privados acompanhado por funções de acessor e é acessada sintaticamente como um campo de uma classe. (Embora as propriedades podem ter diferentes níveis de acesso, a discussão aqui enfoca o caso mais comum de acesso público.) Porque propriedades foram disponíveis em várias edições do Visual Basic, Visual Basic programadores talvez queira pular este tópico.

Geralmente, uma definição de propriedade consiste em duas partes a seguintes:

  • Definição de um membro de dados privados.

    private int number = 0;
    
    Private number As Integer = 0
    
  • Definição de uma propriedade pública usando a sintaxe de declaração de propriedade. Essa sintaxe associa o membro de dados particulares uma propriedade pública por meio de obter e set funções de acessor.

    public int MyNumber 
    {
    // Retrieves the number data member.
    get 
       { 
          return number; 
       }
    // Assigns to the number data member.
    set 
       { 
          number = value;
       }
    }
    
    Public Property MyNumber As Integer
       ' Retrieves number.
       Get 
          Return number
       End Get
       ' Assigns to number.
       Set 
          number = value
       End Set
    End Property
    

O termo valor é uma palavra-chave na sintaxe para a definição da propriedade. A variável valor é atribuído à propriedade no código de chamada. O tipo de valor deve ser o mesmo que o tipo declarado da propriedade ao qual está atribuída.

Enquanto uma definição de propriedade geralmente inclui um membro de dados privados, isso não é necessário. O obter acessador poderia retornar um valor sem acessar um membro de dados privados. Um exemplo é uma propriedade cujo obter método retorna a hora do sistema. Propriedades permitem a ocultação de dados, os métodos acessadores ocultar a implementação da propriedade.

Existem algumas diferenças na sintaxe da propriedade entre diferentes linguagens de programação. Por exemplo, o termo propriedade não é uma palavra-chave em C#, mas é uma palavra-chave em Visual Basic. Para obter informações específicas do idioma, consulte a documentação para aquele idioma

O exemplo a seguir define uma propriedade chamada MyNumber na classe SimpleProperty e acessa MyNumber da classe UsesSimpleProperty.

public class SimpleProperty 
{
   private int number = 0;
   public int MyNumber 
   {
   // Retrieves the data member number.
   get 
      { 
         return number; 
      }
   // Assigns to the data member number.
   set 
      { 
         number = value;
      }
   } 
// Other members.
}
public class UsesSimpleProperty
{
   public static void Main()
   {
      SimpleProperty example = new SimpleProperty();
// Sets the property.
      example.MyNumber = 5;
// Gets the property.
      int anumber = example.MyNumber;
   }
}
Public Class SimpleProperty 
    Private number As Integer = 0

    Public Property MyNumber As Integer
        ' Retrieves number.
        Get 
            Return number
        End Get
        ' Assigns to number.
        Set 
            number = value
        End Set
    End Property    

' Other members...
End Class

Public Class UsesSimpleProperty
    Public Shared Sub Main()
        Dim example As New SimpleProperty()
        ' Sets the property.
        example.MyNumber = 5
        ' Gets the property.
        Dim anumber As Integer = example.MyNumber
    End Sub
End Class

O obter e set métodos geralmente não são diferentes de outros métodos. Eles podem executar qualquer programa lógica, lançar exceções, ser substituída e ser declarada com qualquer modificadores permitidos pela linguagem de programação. No entanto, observe que propriedades também podem ser estáticas. Se uma propriedade for estática, existem limitações sobre o que o obter e set métodos podem fazer. Consulte a referência de linguagem de programação para obter detalhes.

O tipo de uma propriedade pode ser um tipo primitivo, uma coleção de tipos primitivos, um tipo definido pelo usuário ou uma coleção de tipos definidos pelo usuário. Para todos os tipos primitivos, o.NET Framework fornece conversores de tipo para implementam as conversões de valor de seqüência. Para obter detalhes, consulte Generalizada de conversão de tipo. Um conversor de tipo está disponível para uma propriedade, ela pode ser exibida no navegador de propriedades no designer. Se você define propriedades personalizadas e deseja que o navegador de propriedade para exibi-las, você deve implementar os conversores de tipo personalizado.

Quando o tipo de dados de uma propriedade é uma enumeração, um ambiente de desenvolvimento como, por exemplo, Visual Studio do Microsoft exibirá a propriedade como uma lista suspensa na janela Propriedades. Se o tipo de dados de uma propriedade é uma classe que tem propriedades, essas propriedades são chamadas de subpropriedades da definição de propriedade. Na janela Propriedades do Visual Studio, um usuário pode expandir uma propriedade para exibir seus subpropriedades.

É importante adicionar atributos a propriedades, para que eles sejam exibidos corretamente no navegador de propriedades em tempo de design. Para obter detalhes, consulte Atributos de tempo de Design para componentes.

Você deve expor propriedades ao invés de campos públicos de seus componentes, porque as propriedades podem ser atualizadas, eles permitem a ocultação de dados e os métodos acessadores podem executar a lógica adicional. Geralmente, por causa das otimizações de just-in-time, propriedades são não mais caras que os campos.

Consulte também

Conceitos

Atributos de tempo de design para componentes