Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze handleiding leert u typen maken in C#. U schrijft kleine hoeveelheden code, vervolgens compileert en voert u die code uit. De zelfstudie bevat een reeks lessen die verschillende soorten typen in C# verkennen. In deze lessen leert u de basisprincipes van de C#-taal.
De voorgaande zelfstudies werkten met tekst en getallen. Tekenreeksen en getallen zijn eenvoudige typen: ze slaan elk één waarde op. Naarmate uw programma's groter worden, moet u werken met geavanceerdere gegevensstructuren. C# biedt verschillende typen die u kunt definiëren wanneer u gegevensstructuren nodig hebt met meer velden, eigenschappen of gedrag. Laten we deze typen gaan verkennen.
In deze handleiding leert u:
- Tuple-typen maken en bewerken.
- Recordtypen maken.
- Meer informatie over struct-, klasse- en interfacetypen.
Vereiste voorwaarden
U moet een van de volgende opties hebben:
- Een GitHub-account voor het gebruik van GitHub Codespaces. Als u nog geen account hebt, kunt u een gratis account maken op GitHub.com.
- Een computer waarop de volgende hulpprogramma's zijn geïnstalleerd:
- De .NET 10 SDK.
- Visual Studio Code.
- De C# DevKit.
Als u codespaces wilt gebruiken, hebt u een GitHub-account nodig. Als u nog geen account hebt, kunt u een gratis account maken op GitHub.com.
Tuples
Als u een GitHub Codespace met de zelfstudieomgeving wilt starten, opent u een browservenster naar de opslagplaats van de zelfstudiecodespace . Selecteer de groene knop Code en het tabblad Codespaces . Selecteer vervolgens het + teken om een nieuwe Codespace te maken met behulp van deze omgeving. Als u andere zelfstudies in deze reeks hebt voltooid, kunt u die coderuimte openen in plaats van een nieuwe te maken.
Wanneer uw codespace wordt geladen, maakt u een nieuw bestand in de map tutorials met de naam tuples.cs.
Open het nieuwe bestand.
Typ of kopieer de volgende code in tuples.cs:
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}.");Voer uw programma uit door de volgende opdrachten te typen in het geïntegreerde terminalvenster:
cd tutorials dotnet tuples.csTuples zijn een geordende reeks waarden met een vaste lengte. Elk element van een tuple heeft een type en een optionele naam.
Aanbeveling
Terwijl u C# (of een programmeertaal) verkent, maakt u fouten wanneer u code schrijft. De compiler vindt deze fouten en rapporteert deze aan u. Wanneer de uitvoer foutberichten bevat, bekijkt u de voorbeeldcode en de code om te zien wat u moet oplossen. U kunt Copilot ook vragen om verschillen te vinden of fouten te herkennen. Deze oefening helpt u de structuur van C#-code te leren.
Voeg de volgende code toe na de vorige code om een tuple-lid te wijzigen:
pt.X = pt.X + 5; Console.WriteLine($"The point is now at {pt}.");U kunt ook een nieuwe tuple maken die een gewijzigde kopie van het origineel is met behulp van een
withexpressie. Voeg de volgende code toe na de bestaande code en typdotnet tuples.csin het terminalvenster om de resultaten te bekijken:var pt2 = pt with { Y = 10 }; Console.WriteLine($"The point 'pt2' is at {pt2}.");De tuple
pt2bevat deXwaarde vanpt6, enpt2.Yis 10. Tuples zijn structurele typen. Met andere woorden, tuple-typen hebben geen namen zoalsstringofint. Een tupletype wordt gedefinieerd door het aantal leden, aangeduid als arity en de typen van die leden. De ledennamen zijn voor het gemak. U kunt een tuple toewijzen aan een tuple met dezelfde ariteit en typen, zelfs als de elementen verschillende namen hebben.U kunt de volgende code toevoegen na de code die u al hebt geschreven:
var subscript = (A: 0, B: 0); subscript = pt; Console.WriteLine(subscript);Probeer het door in het terminalvenster te typen
dotnet tuples.cs. De variabelesubscriptheeft twee leden, beide gehele getallen. Beidesubscriptenptvertegenwoordigen exemplaren van hetzelfde tupletype: een tuple die tweeintleden bevat.Tuples zijn eenvoudig te maken: u declareert meerdere leden tussen haakjes. Alle volgende declaraties definiëren verschillende tuples met verschillende ariteiten en lidtype.
Voeg de volgende code toe om nieuwe tuple-typen te maken:
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);Probeer deze wijziging door opnieuw te typen
dotnet tuples.csin het terminalvenster.
Hoewel tuples eenvoudig te maken zijn, zijn ze beperkt in hun mogelijkheden. Tuple-typen hebben geen namen, dus u kunt geen betekenis overbrengen naar de set waarden. Tuple-typen kunnen geen gedrag toevoegen. C# heeft andere soorten typen die u kunt maken wanneer uw type gedrag definieert.
Recordtypen maken
Tuples zijn ideaal voor die tijden wanneer u meerdere waarden in dezelfde structuur wilt hebben. Ze zijn lichtgewicht en u kunt ze declareren terwijl u ze gebruikt. Naarmate uw programma groeit, kunt u merken dat u hetzelfde tuple-type in uw code gebruikt. Als uw app werkt in de 2D-grafiekruimte, zijn de tuples die punten vertegenwoordigen mogelijk gemeenschappelijk. Wanneer u dit patroon vindt, kunt u een record type declareren dat deze waarden opslaat en meer mogelijkheden biedt.
Voeg de volgende code toe om een
record-type te declareren en te gebruiken als representatie van eenPoint.public record Point(int X, int Y);De voorgaande code moet onder aan het bronbestand staan. Typedeclaraties zoals
recorddeclaraties moeten uitvoerbare instructies volgen in een app op basis van bestanden.Voeg de volgende code toe voorafgaand aan de
recorddeclaratie:Point pt3 = new Point(1, 1); var pt4 = pt3 with { Y = 10 }; Console.WriteLine($"The two points are {pt3} and {pt4}");De
recorddeclaratie is een enkele regel code voor hetPointtype, waarin de waardenXenYworden opgeslagen in lees-eigenschappen. U gebruikt de naamPointwaar u dat type ook gebruikt. Typen met een juiste naam, zoalsPoint, geven informatie over hoe het type wordt gebruikt. De aanvullende code laat zien hoe u eenwithexpressie gebruikt om een nieuw punt te maken dat een gewijzigde kopie van het bestaande punt is. De regelpt4 = pt3 with { Y = 10 }zegt: 'pt4heeft dezelfde waarden alspt3behalve dieYis toegewezen aan 10'. U kunt een willekeurig aantal eigenschappen toevoegen om te wijzigen in éénwithexpressie.De voorgaande
recorddeclaratie is één regel code die eindigt op;. U kunt gedrag toevoegen aan eenrecordtype door leden te declareren. Een recordlid kan een functie of meer gegevenselementen zijn. De leden van een type bevinden zich in de typedeclaratie tussen{en}tekens.Verwijder de
;coderegels en voeg de volgende regels code toe na derecorddeclaratie:{ public double Slope() => (double)Y / (double)X; }Voeg de volgende code toe vóór de
recorddeclaratie, na de regel met dewithexpressie:double slopeResult = pt4.Slope(); Console.WriteLine($"The slope of {pt4} is {slopeResult}");Typ
dotnet tuples.csin het terminalvenster om deze versie uit te voeren.U hebt formaliteit toegevoegd aan de tuple die een
XenYwaarde vertegenwoordigt. U hebt er eenrecordvan gemaakt dat een benoemd type definieert en een lid opneemt om de helling te berekenen. Eenrecordtype is een afkorting voor eenrecord class: Eenclasstype dat extra gedrag bevat.U kunt het
Pointtype ook wijzigen om het terecord structmaken:public record struct Point(int X, int Y)A
record structis eenstructtype dat het extra gedrag bevat dat aan allerecordtypen wordt toegevoegd.Probeer deze versie door in het terminalvenster te typen
dotnet tuples.cs.
Struct-, klasse- en interface-types
Alle concrete benoemde typen in C# zijn class of struct typen, inclusief record typen. A class is een verwijzingstype. A struct is een waardetype. Variabelen van een waardetype slaan de inhoud van de instantie direct op in het geheugen. Met andere woorden, een record struct Point slaat twee gehele getallen op: X en Y. Variabelen van een verwijzingstype slaan een verwijzing of aanwijzer op naar de opslag voor het exemplaar. Met andere woorden, een record class Point slaat een verwijzing op naar een blok geheugen met de waarden voor X en Y.
In de praktijk betekent dit dat waardetypen worden gekopieerd wanneer ze worden toegewezen, maar een kopie van een klasse-exemplaar een kopie van de verwijzing is. Deze gekopieerde verwijzing verwijst naar hetzelfde exemplaar van een punt, met dezelfde opslag voor X en Y.
De record modifier geeft de compiler de opdracht om verschillende leden voor u te schrijven. Meer informatie vindt u in het artikel over recordtypen in de sectie Grondbeginselen.
Wanneer u een record type declareert, declareert u dat uw type een standaardset gedrag moet gebruiken voor gelijkheidsvergelijkingen, toewijzingen en het kopiëren van exemplaren van dat type. Records zijn de beste keuze wanneer het de primaire verantwoordelijkheid van uw type is om gerelateerde gegevens op te slaan. Wanneer u meer gedrag toevoegt, kunt u overwegen om struct- of class-typen te gebruiken, zonder de record-modifier.
Gebruik struct typen voor waardetypen wanneer u geavanceerder gedrag nodig hebt, maar de primaire verantwoordelijkheid is het opslaan van waarden. Gebruik class typen om objectgeoriënteerde idiomen te gebruiken, zoals inkapseling, overname en polymorfisme.
U kunt ook typen definiëren interface om gedragscontracten te declareren die door verschillende typen moeten worden geïmplementeerd. Beide struct en class typen kunnen interfaces implementeren.
Doorgaans gebruikt u al deze typen in grotere programma's en bibliotheken. Zodra u de .NET SDK hebt geïnstalleerd, kunt u deze typen verkennen met behulp van zelfstudies over klassen in de sectie Basisprincipes.
U hebt de cursus "Typen maken in C#" voltooid. Meer informatie over typen in C# vindt u in de volgende artikelen:
Middelen opschonen
GitHub verwijdert uw Codespace automatisch na 30 dagen inactiviteit. Als u van plan bent om meer tutorials uit deze serie te volgen, kunt u uw Codespace geconfigureerd laten. Als u klaar bent om naar de .NET-site te gaan om de .NET SDK te downloaden, kunt u uw Codespace verwijderen. Als u uw Codespace wilt verwijderen, opent u een browservenster en gaat u naar uw Codespaces. U ziet nu een lijst met uw coderuimten in het venster. Selecteer de drie puntjes (...) in de vermelding voor de zelfstudiecoderuimte en selecteer Verwijderen.