Share via


Lees-schrijfeigenschappen declareren en gebruiken (C#-programmeerhandleiding)

Eigenschappen bieden het gemak van leden van openbare gegevens zonder de risico's die gepaard gaan met onbeveiligde, niet-gecontroleerde en niet-geverifieerde toegang tot de gegevens van een object. Eigenschappen declareren accessors: speciale methoden waarmee waarden van het onderliggende gegevenslid worden toegewezen en opgehaald. Met de set accessor kunnen gegevensleden worden toegewezen en haalt de get accessor gegevenslidwaarden op.

In dit voorbeeld ziet u een Person klasse met twee eigenschappen: Name (tekenreeks) en Age (int). Beide eigenschappen bieden get en set accessors, zodat ze worden beschouwd als lees-/schrijfeigenschappen.

Opmerking

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

Robuuste programmering

In het vorige voorbeeld zijn de Name eigenschappen Age openbaar en bevatten ze zowel een get als een set toegangsfunctie. Met openbare accessors kan elk object deze eigenschappen lezen en schrijven. Soms is het echter wenselijk om een van de accessors uit te sluiten. U kunt de set toegangsfunctie weglaten om de eigenschap alleen-lezen te maken:

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

U kunt ook één toegangsbeheerprogramma openbaar maken, maar de andere privé of beveiligd maken. Zie Asymmetrische toegangsbeheer voor meer informatie.

Zodra de eigenschappen zijn gedeclareerd, kunnen ze worden gebruikt als velden van de klasse. Eigenschappen maken een natuurlijke syntaxis mogelijk bij het ophalen en instellen van de waarde van een eigenschap, zoals in de volgende instructies:

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

In een eigenschapsmethode set is een speciale value variabele beschikbaar. Deze variabele bevat de waarde die de gebruiker heeft opgegeven, bijvoorbeeld:

_name = value;

Let op de schone syntaxis voor het verhogen van de Age eigenschap op een Person object:

person.Age += 1;

Als er afzonderlijke setget methoden zijn gebruikt om eigenschappen te modelleren, kan de equivalente code er als volgt uitzien:

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

De ToString methode wordt in dit voorbeeld overschreven:

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

U ziet dat ToString dit niet expliciet wordt gebruikt in het programma. Deze wordt standaard aangeroepen door de WriteLine aanroepen.

Zie ook