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 C# is de definitie van een type, een klasse, struct of record, net als een blauwdruk die aangeeft wat het type kan doen. Een object is in feite een blok geheugen toegewezen en geconfigureerd volgens de blauwdruk. Dit artikel bevat een overzicht van deze blauwdrukken en de bijbehorende functies. In het volgende artikel in deze reeks worden objecten geïntroduceerd.
Encapsulatie
Inkapseling wordt soms ook wel de eerste pijler of het principe van objectgeoriënteerde programmering genoemd. Een klasse of struct kan opgeven hoe toegankelijk elk van de leden is om buiten de klasse of struct te coderen. Leden die niet zijn bedoeld voor consumenten buiten de klasse of assembly, zijn verborgen om het potentieel voor coderingsfouten of schadelijke aanvallen te beperken. Zie de zelfstudie Objectgeoriënteerd programmeren voor meer informatie.
Leden
De leden van een type bevatten alle methoden, velden, constanten, eigenschappen en gebeurtenissen. In C# zijn er geen globale variabelen of methoden, zoals in sommige andere talen. Zelfs het toegangspunt van een programma, de Main
methode, moet worden gedeclareerd binnen een klasse of struct (impliciet wanneer u instructies op het hoogste niveau gebruikt).
De volgende lijst bevat alle verschillende soorten leden die kunnen worden gedeclareerd in een klasse, struct of record.
- Velden
- Constanten
- Eigenschappen
- Methoden
- Constructeurs
- Evenementen
- Finaliseerders
- Indexeerders
- Bedieners
- Geneste types
Zie Leden voor meer informatie.
Toegankelijkheid
Sommige methoden en eigenschappen zijn bedoeld voor het aanroepen of openen van code buiten een klasse of struct, ook wel clientcode genoemd. Andere methoden en eigenschappen kunnen alleen worden gebruikt in de klasse of struct zelf. Het is belangrijk om de toegankelijkheid van uw code te beperken, zodat alleen de beoogde clientcode deze kan bereiken. U geeft op hoe toegankelijk uw typen en hun leden zijn voor clientcode met behulp van de volgende toegangsaanpassingen:
De standaardtoegankelijkheid is private
.
Erfenis
Klassen (maar geen structs) ondersteunen het concept van overname. Een klasse die is afgeleid van een andere klasse, de basisklasse genoemd, bevat automatisch alle openbare, beveiligde en interne leden van de basisklasse, behalve de constructors en finalizers.
Klassen kunnen worden gedeclareerd als abstract, wat betekent dat een of meer van hun methoden geen implementatie hebben. Hoewel abstracte klassen niet rechtstreeks kunnen worden geïnstantieerd, kunnen ze fungeren als basisklassen voor andere klassen die de ontbrekende implementatie bieden. Klassen kunnen ook als sealed worden gedeclareerd om te voorkomen dat andere klassen ervan erven.
Zie Overname en Polymorfisme voor meer informatie.
Koppelvlakken
Klassen, structs en records kunnen meerdere interfaces implementeren. Als u wilt implementeren vanuit een interface, betekent dit dat het type alle methoden implementeert die in de interface zijn gedefinieerd. Zie Interfaces voor meer informatie.
Algemene typen
Klassen, structs en records kunnen worden gedefinieerd met een of meer typeparameters. De clientcode levert het type wanneer het een instantie van het type creëert. De List<T> klasse in de System.Collections.Generic naamruimte wordt gedefinieerd met één typeparameter. Clientcode maakt een instantie van een List<string>
of List<int>
om het type op te geven dat de lijst bevat. Zie Generics voor meer informatie.
Statische typen
Klassen (maar geen structs of records) kunnen worden gedeclareerd als static
. Een statische klasse kan alleen statische leden bevatten en kan niet worden geïnstantieerd met het new
trefwoord. Een kopie van de klasse wordt in het geheugen geladen wanneer het programma wordt geladen en de leden worden geopend via de klassenaam. Klassen, structs en records kunnen statische leden bevatten. Zie Statische klassen en statische klasseleden voor meer informatie.
Geneste types
Een klasse, struct of record kan worden genest binnen een andere klasse, struct of record. Zie Geneste typen voor meer informatie.
Gedeeltelijke typen
U kunt een deel van een klasse, struct of methode definiëren in het ene codebestand en een ander deel in een afzonderlijk codebestand. Zie Gedeeltelijke klassen en methoden voor meer informatie.
Objectinitialisatoren
U kunt klasse- of structobjecten en verzamelingen objecten instantiëren en initialiseren door waarden toe te wijzen aan de eigenschappen ervan. Zie Objecten initialiseren met behulp van een object-initialisatiefunctie voor meer informatie.
Anonieme types
In situaties waarin het niet handig of noodzakelijk is om een benoemde klasse te maken, gebruikt u anonieme typen. Benoemde gegevensleden definiëren anonieme typen. Zie Anonieme typen voor meer informatie.
Uitbreidingsleden
U kunt een klasse uitbreiden zonder een afgeleide klasse te maken door een afzonderlijk type te maken. Dat type bevat methoden die kunnen worden aangeroepen alsof ze deel uitmaken van het oorspronkelijke type. Zie Extensiemethoden voor meer informatie.
Impliciet getypte lokale variabelen
Binnen een klasse- of structmethode kunt u impliciet typen gebruiken om de compiler te instrueren om het type van een variabele tijdens het compileren te bepalen. Zie var (C#-verwijzing) voor meer informatie.
Gegevens
U kunt de record
wijzigingsfunctie toevoegen aan een klasse of een struct. Records zijn typen met ingebouwd gedrag voor gelijkheid op basis van waarden. Een record (of record class
record struct
) biedt de volgende functies:
- Beknopte syntaxis voor het maken van een verwijzingstype met onveranderbare eigenschappen.
- Gelijkheid van waarde. Twee variabelen van een recordtype zijn gelijk als ze hetzelfde type hebben en als voor elk veld de waarden in beide records gelijk zijn. Klassen gebruiken verwijzings gelijkheid: twee variabelen van een klassetype zijn gelijk als ze naar hetzelfde object verwijzen.
- Beknopte syntaxis voor niet-destructieve mutatie.
with
Met een expressie kunt u een nieuw recordexemplaar maken dat een kopie is van een bestaand exemplaar, maar waarbij de opgegeven eigenschapswaarden zijn gewijzigd. - Ingebouwde opmaak voor weergave.
Met
ToString
de methode worden de naam van het recordtype en de namen en waarden van openbare eigenschappen afgedrukt. - Ondersteuning voor erfenishiërarchieën in recordklassen. Recordklassen ondersteunen overname. Recordstructs bieden geen ondersteuning voor overname.
Zie Records voor meer informatie.
C#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.