Beágyazott adatok létrehozása a C-ben lévő szerkezetekkel#
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.