Compartilhar via


How to: Declarar e usar de leitura/gravação Propriedades (guia de programação C#)

Propriedades fornecem a conveniência de membros de dados públicos sem os riscos que acompanham o acesso desprotegido, controlado e não-verificado para dados de um objeto. Isso é conseguido por meio de acessadores: métodos especiais que atribuir e recuperam valores de membro de dados subjacente. O set acessador permite que os membros de dados seja atribuído e o obter acessador recupera os valores de membro de dados.

Esse exemplo mostra um Person classe tem duas propriedades: Name(string) e Age (int). Ambas as propriedades fornecem get e set acessadores, portanto são consideradas de leitura/gravação propriedades.

Exemplo

class Person
{
    private string name = "N/tcA";
    private int age = 0;

    // Declare a Name property of type string:
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }

    // Declare an Age property of type int:
    public int Age
    {
        get
        {
            return age;
        }

        set
        {
            age = value;
        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }
}

class TestPerson
{
    static void Main()
    {
        // Create a new Person object:
        Person person = new Person();

        // Print out the name and the age associated with the person:
        Console.WriteLine("Person details - {0}", person);

        // Set some values on the person object:
        person.Name = "Joe";
        person.Age = 99;
        Console.WriteLine("Person details - {0}", person);

        // Increment the Age property:
        person.Age += 1;
        Console.WriteLine("Person details - {0}", person);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Person details - Name = N/tcA, Age = 0
    Person details - Name = Joe, Age = 99
    Person details - Name = Joe, Age = 100
*/

Programação robusta

No exemplo anterior, o Name e Age propriedades são pública e incluir ambos um get e um set acessador. Isso permite que qualquer objeto ler e gravar essas propriedades. No entanto, às vezes é desejável, excluir um dos acessadores. Omitindo o set acessador, por exemplo, faz a propriedade somente leitura:

public string Name
{
    get
    {
        return name;
    }
}

Como alternativa, você pode expor um assessor publicamente, mas faça outra particular ou protegido. Para obter mais informações, consulte Acessibilidade do acessador assimétrica.

Depois que as propriedades são declaradas, eles podem ser usados como se fossem os campos da classe. Isso permite uma sintaxe muito natural quando tanto Obtendo e definindo o valor de uma propriedade, como nas instruções a seguir:

person.Name = "Joe";
person.Age = 99;

Observe que a propriedade set método especial value variável está disponível. Essa variável contém o valor que o usuário especificou como, por exemplo:

name = value;

Observe a sintaxe limpa para incrementar a Age propriedade em um Person objeto:

person.Age += 1;

Se separado set e get foram usados métodos de propriedades do modelo, o código equivalente teria esta aparência:

person.SetAge(person.GetAge() + 1); 

O ToString método é substituído neste exemplo:

public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}

Observe que ToString não explicitamente é usado no programa. Ela é chamada por padrão, o WriteLine chamadas.

Consulte também

Referência

Properties (C# Programming Guide)

Classes e estruturas (guia de programação de C#)

Conceitos

C# Programming Guide