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


Típusok létrehozása a C-ben#

Ez az oktatóanyag bemutatja, hogyan hozhat létre típusokat a C#-ban. Kis mennyiségű kódot ír, majd lefordítja és futtatja a kódot. Az oktatóanyag számos olyan leckét tartalmaz, amelyek a C# különböző típusait vizsgálják. Ezek a leckék a C# nyelv alapjait tanítják meg.

Jótanács

Ha egy kódrészletblokk tartalmazza a "Futtatás" gombot, az a gomb megnyitja az interaktív ablakot, vagy lecseréli a meglévő kódot az interaktív ablakban. Ha a kódrészlet nem tartalmaz "Futtatás" gombot, átmásolhatja a kódot, és hozzáadhatja az aktuális interaktív ablakhoz.

Az előző oktatóanyagok szöveggel és számokkal dolgoztak. A sztringek és számok egyszerű típusok: mindegyik egyetlen értéket tárol. Ahogy a programok egyre nagyobbak lesznek, kifinomultabb adatstruktúrákkal kell dolgoznia. A C# különböző típusú típusokat biztosít, amelyek akkor határozhatók meg, ha több mezővel, tulajdonsággal vagy viselkedéssel rendelkező adatstruktúrákra van szüksége. Kezdjük el felfedezni ezeket a típusokat.

Tupolok

A tuples egy rögzített hosszúságú értékek rendezett sorozata. A tömb minden elemének van egy típusa és egy opcionális neve. Az alábbi kód egy 2D pontot jelképező tömböt deklarál. A "Futtatás" gombra kattintva illessze be az alábbi kódot az interaktív ablakba, és futtassa.

var pt = (X: 1, Y: 2);

var slope = (double)pt.Y / (double)pt.X;
Console.WriteLine($"A line from the origin to the point {pt} has a slope of {slope}.");

Jótanács

A C# (vagy bármely programozási nyelv) felfedezése során hibákat követ el a kód írásakor. A fordító megkeresi ezeket a hibákat, és jelenti őket Önnek. Ha a kimenet hibaüzeneteket tartalmaz, tekintse meg a példakódot és az interaktív ablakban található kódot, hogy lássa, mit kell kijavítani. Ez a gyakorlat segít a C#-kód szerkezetének megismerésében.

A tuple bármely tagját áthelyezheti. Adja hozzá a következő kódot az interaktív ablakban a meglévő kód után. Az eredmények megtekintéséhez nyomja le ismét a "Futtatás" gombot.

pt.X = pt.X + 5;
Console.WriteLine($"The point is now at {pt}.");

Létrehozhat egy új átkötést is, amely az eredeti módosított másolata egy with kifejezéssel. Adja hozzá a következő kódot az interaktív ablakban már szereplő kód után, és nyomja le a "Futtatás" billentyűt az eredmények megtekintéséhez:

var pt2 = pt with { Y = 10 };
Console.WriteLine($"The point 'pt2' is at {pt2}.");

A rekord pt2 a X (6) értéket pt tartalmazza, és pt2.Y 10.

A csuplok szerkezeti típusok. Más szóval a tuple típusok nem rendelkeznek nevekkel, mint például string vagy int. A tuple típust a tagok száma, más néven arity, és a tagok típusai határozzák meg. A tagnevek kényelmesek. Az azonos aritású és típusú tuple-hoz hozzárendelhet másik tuple-t, akkor is, ha a tagok nevei eltérőek. Az interaktív ablakban már írt kód után a következő kódot is hozzáadhatja, és kipróbálhatja:

var subscript = (A: 0, B: 0);
subscript = pt;
Console.WriteLine(subscript);

A változónak subscript két tagja van, amelyek mindegyike egész szám. subscript és pt azonos típusú tuple példányokat jelöl, egy 2 int tagot tartalmazó tuple-t.

A csuplok könnyen létrehozhatók: Zárójelek között deklarálhat több tagot. Az alábbiak különböző aritású és tagtípusú tuplékat deklarálnak. Adja hozzá a következő kódot új n-es típusok definiálásához:

var namedData = (Name: "Morning observation", Temp: 17, Wind: 4);
var person = (FirstName: "", LastName: "");
var order = (Product: "guitar picks", style: "triangle", quantity: 500, UnitPrice: 0.10m);

A tuplák könnyen létrehozhatók, de korlátozottak a képességeik. A típusoknak nincs nevük, így nem tud jelentést közvetíteni az értékhalmaznak. A tépletípusok nem adhatnak hozzá viselkedést. A C# más típusú típusokat is létrehozhat, amikor a típus meghatározza a viselkedést.

Rekordtípusok létrehozása

A tuple nagyszerűen használható, amikor több értéket szeretnénk ugyanabban az adatstruktúrában. Könnyűek, és használat közben deklarálhatók. Ahogy haladsz a programozással, előfordulhat, hogy végig ugyanazt a típusú duplákat használod a kódban. Ha az alkalmazás a 2D gráfterületen működik, gyakoriak lehetnek a pontokat jelképező vonások. Miután megtalálta, deklarálhat egy típust record , amely tárolja ezeket az értékeket, és további képességeket biztosít. Az alábbi kódminta egy metódussal Main jelöli a program belépési pontját. Így deklarálhat egy olyan típust record , amely megelőzi a kód belépési pontját. A meglévő minta a következő kódra való lecseréléséhez nyomja le a "Futtatás" gombot a következő kódra.

Figyelmeztetés

Ne másold és illeszd be. Az interaktív ablakot alaphelyzetbe kell állítani a következő minta futtatásához. Ha hibát követ el, az ablak lefagy, és frissítenie kell a lapot a folytatáshoz.

A következő kód egy record típust deklarál és használ egy Point, majd ezt a Point struktúrát használja a Main metódusban.

public record Point(int X, int Y);

public static void Main()
{
    Point pt = new Point(1, 1);
    var pt2 = pt with { Y = 10 };
    Console.WriteLine($"The two points are {pt} and {pt2}");
}

A record deklaráció egyetlen kódsor a Point típushoz, amely tárolja a X és Y értékeket a csak olvasható tulajdonságban. A nevet Point bárhol használhatja, ahol ezt a típust használja. A megfelelően elnevezett típusok, például Pointa típus használatáról adnak tájékoztatást. A Main metódus bemutatja, hogyan hozhat létre egy új pontot egy kifejezéssel with , amely a meglévő pont módosított másolata. A sor pt2 = pt with { Y = 10 } azt mondja: "pt2 ugyanazokkal az értékekkel rendelkezik, mint pt, kivéve, hogy a Y értéke 10." Tetszőleges számú tulajdonságot hozzáadhat egyetlen kifejezésben with.

Az előző deklaráció record egy kódsor, amely az összes C#-utasításhoz ;hasonlóan végződik. A tagok deklarálásával viselkedést adhat egy record típushoz. A rekordtagok lehetnek függvények vagy több adatelem. A típus tagjai a típusdeklarációban vannak, a { és } karakterek között. Cserélje le a rekorddeklarációt a következő kódra:

public record Point(int X, int Y)
{
    public double Slope() => (double)Y / (double)X;
}

Ezután adja hozzá a következő kódot a metódushoz a Main kifejezést tartalmazó with sor után:

double slope = pt.Slope();
Console.WriteLine($"The slope of {pt} is {slope}");

Formalitást adott a tuppelhez, amely egy X és egy Y értéket jelöl. Egy elnevezett típussá tetted record, amely definiált és belefoglalt egy tagot a meredekség kiszámításához. A record típus egy rövidítés a record classkövetkezőhöz: Olyan class típus, amely további viselkedést is tartalmaz. A Point típust úgy módosíthatja, hogy az record struct legyen is.

public record struct Point(int X, int Y)
{
    public double Slope() => (double) Y / (double) X;
}

Az A record struct olyan struct típus, amely az összes record típushoz hozzáadott extra viselkedést tartalmazza.

Strukturálás, osztály és felülettípusok

A C# összes nevesített típusa vagy class típus, vagy struct típus. Az A class egy referenciatípus. A structértéktípus. Az érték típusú változók a példány tartalmát közvetlenül a memóriában tárolják. Más szóval egy record struct Point két egész számot tárol: X és Y. A referenciatípus változói a példány tárolására mutató hivatkozást vagy mutatót tárolnak. Más szóval egy record class Point memóriablokkra mutató hivatkozást tárol, amely a következő értékeket X tartalmazza: és Y.

A gyakorlatban ez azt jelenti, hogy az értéktípusok hozzárendeléskor kerülnek másolásra, de egy osztálypéldány másolata a hivatkozás másolata. Ez a másolt hivatkozás egy pont ugyanazon példányára hivatkozik, ugyanazzal a tárterülettel X és Y.

A record módosító utasítja a fordítót, hogy több tagot írjon meg Önnek. Az alapismeretek szakaszban a rekordtípusokról szóló cikkből tudhat meg többet.

Amikor deklarál egy típust record , deklarálja, hogy a típusnak egy alapértelmezett viselkedéskészletet kell használnia az egyenlőségi összehasonlításokhoz, a hozzárendeléshez és az ilyen típusú példányok másolásához. A rekordok a legjobb választás, ha a kapcsolódó adatok tárolása az Ön típusának elsődleges feladata. Ha további viselkedéseket ad hozzá, fontolja meg a struct vagy class típusok használatát record módosító nélkül.

Ha kifinomultabb viselkedésre van szükség, értéktípusokhoz használ struct típusokat, de az elsődleges felelősség az értékek tárolása. class A típusokkal objektumorientált kifejezéseket használhat, például beágyazást, öröklést és polimorfizmust.

Olyan típusokat is meghatározhat interface , amelyek deklarálják a különböző típusok által implementálandó viselkedési szerződéseket. Mind a class típusok, mind struct a típusok implementálhatnak interfészeket.

Ezeket a típusokat általában nagyobb programokban és könyvtárakban használja. A .NET SDK telepítése után megismerkedhet ezekkel a típusokkal az alapismeretek szakaszban található osztályokra vonatkozó oktatóanyagokkal.

Elvégezte a "Típusok létrehozása C#-ban" interaktív oktatóanyagot. A következő interaktív oktatóanyag elindításához válassza az Ágak és hurkok hivatkozást, vagy látogasson el a .NET-webhelyre, töltse le a .NET SDK-t, hozzon létre egy projektet a gépen, és folytassa a kódolást. A "Következő lépések" szakaszban visszatérhet ezekhez az oktatóanyagokhoz.

A C#-típusokról az alábbi cikkekben tudhat meg többet: