Dela via


Deklarera och använda lässkrivningsegenskaper (C#-programmeringsguide)

Egenskaper ger bekvämligheten för offentliga datamedlemmar utan de risker som följer med oskyddad, okontrollerad och overifierad åtkomst till ett objekts data. Egenskaper deklarerar accessorer: särskilda metoder som tilldelar och hämtar värden från den underliggande datamedlemmen. Set-accessorn gör att datamedlemmar kan tilldelas och get-accessorn hämtar datamedlemsvärden.

Det här exemplet visar en Person klass som har två egenskaper: Name (sträng) och Age (int). Både egenskaper ger get och set åtkomst, så de betraktas som läs-/skrivegenskaper.

Exempel

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

Robust programmering

I föregående exempel Name är egenskaperna och Age offentliga och innehåller både en get och en set accessor. Offentliga accessorer tillåter alla objekt att läsa och skriva dessa egenskaper. Ibland är det dock önskvärt att utesluta en av åtkomstgivarna. Du kan utelämna set accessorn för att göra egenskapen skrivskyddad:

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

Du kan också exponera en accessor offentligt men göra den andra privat eller skyddad. Mer information finns i Asymmetrisk hjälpmedel för accessorer.

När egenskaperna har deklarerats kan de användas som fält i klassen. Egenskaper möjliggör en naturlig syntax när både hämtar och anger värdet för en egenskap, som i följande instruktioner:

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

I en egenskapsmetod set är en särskild value variabel tillgänglig. Den här variabeln innehåller det värde som användaren angav, till exempel:

_name = value;

Observera den rena syntaxen för att öka egenskapen för Age ett Person objekt:

person.Age += 1;

Om separata set metoder och get metoder användes för att modellera egenskaper kan motsvarande kod se ut så här:

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

Metoden ToString åsidosättas i det här exemplet:

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

Observera att ToString det inte uttryckligen används i programmet. Den anropas som standard av anropen WriteLine .

Se även