Beágyazott adatok létrehozása a C-ben lévő szerkezetekkel#

Befejeződött

Ha a projekten dolgozik a rendelés részleteinek nyomon követésén, meg kell őriznie a kapcsolódó információkat, például az ügyfél nevét, szállítási címét és a megrendelések összegét. A C#-beli szerkezetek lehetővé teszik, hogy alapszintű beágyazott tárolót hozzon létre ezekhez az adatokhoz, így egyszerűbben dolgozhat velük, és egyetlen egységként továbbíthatja azokat.

A szerkezetek ismertetése

A szerkezetek értéktípusok a C#-ban, ami azt jelenti, hogy közvetlenül tárolják az adataikat, és nem hivatkoznak rá. A kulcsszóval struct definiálhat egy szerkezetet. A szerkezeteket általában kis, adatközpontú típusokhoz használják, amelyek minimális viselkedést biztosítanak.

  • A szerkezetek értékszemantikával rendelkeznek, ami azt jelenti, hogy az értékek másolása a hozzárendelés vagy metódushívások során történik.
  • A gyakori használati esetek közé tartoznak a számok, a logikai értékek, a karakterek és az időpéldányok.
  • A szerkezeteket gyakran használják egyszerű adatok, például geometriai alakzatok (például Rectangle, Circlekoordináták vagy konfigurációs beállítások) ábrázolására.

A szerkezetek ideálisak a kis, nem módosítható és teljesítmény szempontjából kritikus adatokhoz. Nagyobb, összetettebb objektumok esetén vagy ha a viselkedés a fókusz, érdemes inkább osztályokat használni. Az osztályoktól eltérően a szerkezetek nem örökölhetők más szerkezetektől vagy osztályoktól, de interfészeket implementálhatnak.

Jótanács

Ha a típus az adatok helyett a viselkedésre összpontosít, az osztályok gyakran jobb választásnak bizonyulnak a referencia szemantikája miatt.

Szerkezet definiálása és implementálása

public struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

A kódminta bemutatja, hogyan definiálhat egy szerkezetet mezőkkel és konstruktorokkal a C#-ban.

A szerkezetek interfészeket is implementálhatnak, de más osztályoktól vagy szerkezetektől nem örökölhetnek.

Adatok beágyazása szerkezetekkel

A beágyazás lehetővé teszi az adatokhoz való hozzáférés szabályozását egy szerkezeten belül. Használjon hozzáférési módosítókat, például private, publicvagy internal adja meg az akadálymentességet.

  • A mezők és tulajdonságok privátsá tehetők a közvetlen hozzáférés korlátozása érdekében.
  • A metódusok szabályozható módon kezelhetik az adatokat.

Például:

public struct Rectangle
{
    private int width;
    private int height;

    public Rectangle(int width, int height)
    {
        this.width = width;
        this.height = height;
    }

    public int Area => width * height;
}

A kódminta egy C# szerkezetet mutat be beágyazott mezőkkel és a terület számított tulajdonságával.

Írásvédett módosító alkalmazása a szerkezetekre a nem módosíthatóság érdekében

Az immutability biztosítja, hogy a struktúra létrehozása után az adatok nem módosíthatók. A struktúra akkor hasznos, ha olyan adatokkal dolgozik, amelyeknek az élettartama során állandónak kell maradniuk, például koordinátákat vagy konfigurációs értékeket. Ha a readonly módosítót egy szerkezetre alkalmazza, kényszerítheti a nem módosíthatóságot, így a kód kiszámíthatóbbá és kevésbé hajlamossá válik a nem szándékos módosítások által okozott hibákra.

public readonly struct ImmutablePoint
{
    public int X { get; init; }
    public int Y { get; init; }

    public ImmutablePoint(int x, int y)
    {
        X = x;
        Y = y;
    }
}

A kódminta bemutatja, hogy a readonly módosító használatával nem módosítható szerkezetet hozhat létre a C#-ban.

Megjegyzés

Bár maga a struktúra nem módosítható, a benne lévő változó referenciatípusok továbbra is módosíthatják az állapotukat.

Objektum inicializálók használata szerkezetekkel

A szerkezetek használatakor gyakran több tulajdonságot kell inicializálnia. Az objektum-inicializálók egyszerű és olvasható módot biztosítanak a strukturált példányok egyetlen lépésben történő létrehozására és inicializálására. Ez a megközelítés csökkenti az ismétlődő kódot, és egyértelművé teszi a szándékát.

Az alábbi kódminta egy olyan szerkezetet határoz meg, amely a kapcsolódó adatokat csoportosító tulajdonságokat tartalmazza, és megkönnyíti a szerkezet példányainak inicializálását és használatát.

public struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

Objektum inicializáló használatával létrehozhat és inicializálhat egy Point:

var point = new Point { X = 10, Y = 20 };

A kódminta bemutatja, hogyan lehet objektum inicializálót használni a tulajdonságértékek beállításához egy szerkezetpéldány létrehozásakor.

Jótanács

Az objektum-inicializálók tömörebbé és könnyebben olvashatóvá teszik a kódot a több tulajdonsággal rendelkező szerkezetek használatakor.

Gyakorlati példa: Szerkezetek használata a 2D térben lévő pontok ábrázolására

A szerkezeteket gyakran használják kis, nem módosítható adatstruktúrák ábrázolására. Például egy struktúra segítségével jelölhet egy pontot a 2D térben, és kiszámíthatja a két pont közötti távolságot:

public struct Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }

    public double DistanceTo(Point other)
    {
        int dx = X - other.X;
        int dy = Y - other.Y;
        return Math.Sqrt(dx * dx + dy * dy);
    }
}

var point1 = new Point(3, 4);
var point2 = new Point(7, 1);
Console.WriteLine($"Distance between points: {point1.DistanceTo(point2)}");

Ez a példa bemutatja, hogyan definiálhat egy struktúra egy pontot, hogyan számíthatja ki a két pont közötti távolságot, és hogyan használhatja a szerkezetet egy egyszerű programban.

A beágyazás, a nem módosíthatóság és az objektum inicializálók kombinálásával hatékony és kiszámítható szerkezeteket hozhat létre. Ezek a funkciók segítenek a kapcsolódó adatok tiszta és rendezett kezelésében.