Udostępnij za pośrednictwem


Porady: deklarowanie i użycie właściwości odczytu/zapisu (Przewodnik programowania w języku C#)

Właściwości zapewniają wygodę dane publicznych członków bez ryzyka, które pochodzą z niechronione, niezweryfikowane i niekontrolowany dostęp do obiektu danych.Jest to realizowane przez akcesorów: specjalnych metod, które przypisywania i pobiera wartości z elementu danych podstawowych.Set akcesor umożliwia członkom danych przypisany oraz uzyskać akcesor pobiera wartości elementów członkowskich danych.

Ten przykład pokazuje, Person klasy, która ma dwie właściwości: Name (ciąg) i Age (int).Podać obie właściwości get i set akcesory, więc są one uważane za odczyt/zapis właściwości.

Przykład

class Person
{
    private string name = "N/A";
    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/A, Age = 0
    Person details - Name = Joe, Age = 99
    Person details - Name = Joe, Age = 100
*/

Stabilne programowanie

W poprzednim przykładzie Name i Age właściwości są publicznych i zawiera zarówno get i set akcesor.Dzięki temu każdy obiekt do odczytu i zapisu tych właściwości.Czasami jest jednakże pożądane, aby wykluczyć jeden akcesorów.Pominięcie set akcesor, umożliwia na przykład właściwość tylko do odczytu:

public string Name
{
    get
    {
        return name;
    }
}

Alternatywnie można ujawnić publicznie jeden akcesor, ale inne prywatne lub chronione.Aby uzyskać więcej informacji, zobacz Asymetryczne ułatwień dostępu akcesora.

Po zgłaszane są właściwości, może być używany tak, jakby były one pól klasy.Pozwala to na bardzo naturalne składni, gdy zarówno pobierania i ustawiania wartości właściwości, jak w następujących instrukcji:

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

Należy zauważyć, że we właściwości set metody w specjalnych value zmienna jest dostępna.Ta zmienna zawiera wartość, określonej przez użytkownika, na przykład:

name = value;

Zawiadomienie czyste składnię zwiększający Age właściwość Person obiekt:

person.Age += 1;

Jeżeli oddzielne set i get metody były używane do właściwości modelu, równoważny kod mógłby wyglądać następująco:

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

ToString Metoda zastąpiona jest w tym przykładzie:

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

Warto zauważyć, że ToString jawnie nie jest używany w programie.Jest ono wywoływane przez domyślne przez WriteLine wywołań.

Zobacz też

Informacje

Właściwości (Przewodnik programowania w języku C#)

Klasy i struktury (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#