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 -: särskilda metoder som tilldelar och hämtar värden från den underliggande datamedlemmen. Med sätta-accessorn kan en datamedlem tilldelas, och hämta-accessorn hämtar datamedlemmens värden.

Det här exemplet visar en Person-klass som har två egenskaper: Name (sträng) och Age (int). Båda egenskaperna 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 - {person}");

        // Set some values on the person object:
        person.Name = "Joe";
        person.Age = 99;
        Console.WriteLine($"Person details - {person}");

        // Increment the Age property:
        person.Age += 1;
        Console.WriteLine($"Person details - {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 är egenskaperna Name och Ageoffentliga och innehåller både en get och en set-åtkomst. 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 publikt men göra den andra privat eller skyddad. Mer information finns i asymmetrisk åtkomst.

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

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

I en egenskap set metod ä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 Age på ett Person objekt:

person.Age += 1;

Om separata set- 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 inte uttryckligen används i programmet. Den anropas som standard genom WriteLine-anrop.

Se även