Jak deklarować i używać właściwości zapisu odczytu (Przewodnik programowania w języku C#)

Właściwości zapewniają wygodę elementów członkowskich danych publicznych bez ryzyka, które są chronione, niekontrolowane i niezweryfikowane dostęp do danych obiektu. Właściwości deklarują metody dostępu: specjalne metody, które przypisują i pobierają wartości z bazowego elementu członkowskiego danych. Zestaw dostępu umożliwia przypisanie elementów członkowskich danych, a metodę pobieraniapobiera wartości składowych danych.

W tym przykładzie przedstawiono klasę Person , która ma dwie właściwości: Name (ciąg) i Age (int). Obie właściwości zapewniają get i set metody dostępu, więc są traktowane jako właściwości odczytu/zapisu.

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;
    }
}

public class Wrapper
{
    private string _name = "N/A";
    public string Name
    {
        get
        {
            return _name;
        }
        private set
        {
            _name = value;
        }
    }

}

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
*/

Niezawodne programowanie

W poprzednim przykładzie Name właściwości i Agepubliczne i zawierają zarówno metodę dostępu, jak get i metodę set dostępu. Publiczne metody dostępu umożliwiają odczytywanie i zapisywanie tych właściwości przez dowolny obiekt. Czasami jednak pożądane jest wykluczenie jednego z akcesoriów. Możesz pominąć metodę set dostępu, aby właściwość tylko do odczytu:

public string Name
{
    get
    {
        return _name;
    }
    private set
    {
        _name = value;
    }
}

Alternatywnie można uwidocznić jeden dostęp publicznie, ale udostępnić drugi prywatny lub chroniony. Aby uzyskać więcej informacji, zobacz Asymetryczne ułatwienia dostępu dostępu dostępu.

Po zadeklarowaniu właściwości można ich użyć jako pól klasy. Właściwości umożliwiają składnię naturalną podczas pobierania i ustawiania wartości właściwości, jak w następujących instrukcjach:

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

W metodzie właściwości set dostępna jest specjalna value zmienna. Ta zmienna zawiera wartość określoną przez użytkownika, na przykład:

_name = value;

Zwróć uwagę na czystą składnię zwiększającą AgePerson właściwość obiektu:

person.Age += 1;

Jeśli do modelowania właściwości użyto oddzielnych set metod i get , odpowiedni kod może wyglądać następująco:

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

Metoda ToString jest zastępowana w tym przykładzie:

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

Zwróć uwagę, że ToString nie jest jawnie używany w programie. Jest on domyślnie wywoływany WriteLine przez wywołania.

Zobacz też