Megosztás a következőn keresztül:


Olvasási tulajdonságok deklarálása és használata (C# programozási útmutató)

A tulajdonságok biztosítják a nyilvános adattagok kényelmét anélkül, hogy az objektum adataihoz nem védett, ellenőrizetlen és nem ellenőrzött hozzáférés kockázatát jelentenék. Tulajdonságok deklarálják lekérőket: speciális metódusok, amelyek az alapul szolgáló adattag értékeit állítják be és olvassák le. A tartozék lehetővé teszi az adattagok hozzárendelését, a pedig lekéri tartozék az adattagértékeket.

Ez a minta egy Person osztályt mutat be, amely két tulajdonsággal rendelkezik: Name (sztring) és Age (int). Mindkét tulajdonság get és set tartozékot biztosít, ezért olvasási/írási tulajdonságoknak minősülnek.

Példa

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

Robusztus programozás

Az előző példában a Name és Age tulajdonságok nyilvános, és get és set tartozékot is tartalmaznak. A nyilvános hozzáférési metódusok bármely objektum számára lehetővé teszik, hogy elolvashassa és módosíthassa ezeket a tulajdonságokat. Néha azonban kívánatos kizárni az egyik elérési metódust. Kihagyhatja a set tartozékot, hogy a tulajdonság írásvédett legyen:

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

Másik lehetőségként közzéteheti az egyik tartozékot nyilvánosan, de a másikat magánjellegűvé vagy védetté teheti. További információért lásd a(z) aszimmetrikus hozzáférés akadálymentességét.

A tulajdonságok deklarálása után az osztály mezőiként használhatók. A tulajdonságok lehetővé teszik a természetes szintaxist egy tulajdonság beolvasásakor és beállításakor is, ahogyan az alábbi utasításokban is szerepel:

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

Egy tulajdonság set metódusban egy speciális value változó érhető el. Ez a változó a felhasználó által megadott értéket tartalmazza, például:

_name = value;

Figyelje meg a Age tulajdonság Person objektumon való növelésének tiszta szintaxisát:

person.Age += 1;

Ha külön set és get metódusokat használtak a tulajdonságok modellezéséhez, az egyenértékű kód a következőképpen nézhet ki:

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

A ToString metódust felülírták ebben a példában:

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

Figyelje meg, hogy a ToString nem kifejezetten használják a programban. Alapértelmezés szerint a WriteLine hívások hívják meg.

Lásd még