Overzicht van klassen, structs en records in C #

In C# is de definitie van een type( een klasse, struct of record) als een blauwdruk die aangeeft wat het type kan doen. Een object is in feite een blok geheugen dat is toegewezen en geconfigureerd op basis van 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.

Inkapseling

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 te coderen buiten de klasse of struct. Methoden en variabelen die niet zijn bedoeld voor gebruik buiten de klasse of assembly, kunnen worden 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, omdat er zich in een aantal andere talen bevinden. 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 soorten leden die in een klasse, struct of record kunnen worden gedeclareerd.

  • Velden
  • Constanten
  • Eigenschappen
  • Methoden
  • Constructors
  • gebeurtenis
  • Finalizers
  • Indexeerfuncties
  • Operators
  • Geneste typen

Zie Leden voor meer informatie.

Toegankelijkheid

Sommige methoden en eigenschappen zijn bedoeld om te worden aangeroepen of geopend vanuit 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.

Overname

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, met uitzondering van 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 worden gedeclareerd als verzegeld om te voorkomen dat andere klassen hiervan overnemen.

Zie Overname en Polymorfisme voor meer informatie.

Interfaces

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. Clientcode levert het type wanneer er een exemplaar van het type wordt gemaakt. De List<T> klasse in de System.Collections.Generic naamruimte wordt bijvoorbeeld gedefinieerd met één typeparameter. Clientcode maakt een exemplaar van een List<string> of List<int> om het type op te geven dat in de lijst wordt opgeslagen. 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 typen

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.

Object initialisatiefuncties

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 typen

In situaties waarin het niet handig of noodzakelijk is om een benoemde klasse te maken, gebruikt u anonieme typen. Anonieme typen worden gedefinieerd door hun benoemde gegevensleden. Zie Anonieme typen voor meer informatie.

Extensiemethoden

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 tot het oorspronkelijke type behoren. 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.

Records

C# 9 introduceert het record type, een verwijzingstype dat u kunt maken in plaats van een klasse of een struct. Records zijn klassen met ingebouwd gedrag voor het inkapselen van gegevens in onveranderbare typen. C# 10 introduceert het record struct waardetype. Een record (of record classrecord 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 verwijzingsgewijsheid: 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 overnamehiërarchieën in recordklassen. Recordklassen ondersteunen overname. Record-structs 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.