Partilhar via


Como: declarar e usar propriedades de leitura/gravação (guia de programação do C#)

Propriedades fornecem a conveniência de membros de dados públicos sem os riscos que vêm com acesso desprotegido, não-controlado e não-verificado para dados de um objeto.Isso é realizado através de acessadores: métodos especiais que atribuir e recuperam valores do 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 propriedades de leitura/gravação acessadores, portanto são consideradas.

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 tornar os outros 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 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 em uma propriedade set método um 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 o Age propriedade em um Person objeto:

person.Age += 1;

Se separado set e get foram usados métodos para modelar a propriedades, 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.Ele é invocado por padrão, o WriteLine chamadas.

Consulte também

Referência

Propriedades (guia de programação do C#)

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

Conceitos

Guia de programação do C#