C # Generics
generiek betekent de algemene vorm, niet specifiek. In C# betekent generiek niet specifiek voor een bepaald gegevenstype. met
c# kunt u generieke klassen, interfaces, abstracte klassen, velden,methoden, statische methoden, eigenschappen, gebeurtenissen, gedelegeerden en operators definiëren met behulp van de parameter type en zonder het specifieke gegevenstype. Een type parameter is een plaatshouder voor een bepaald type opgegeven bij het maken van een instantie van het generieke type.
een generiek type wordt gedeclareerd door een typeparameter in hoekhaken achter een typenaam op te geven, bijv., TypeName<T>
waarbij T
een typeparameter is.
Generieke Klasse
Generieke klassen worden gedefinieerd met behulp van een typeparameter in hoekhaken achter de klassenaam. Het volgende definieert een generieke klasse.
hierboven is de DataStore
een generieke klasse., T
wordt type parameter genoemd, die kan worden gebruikt als een type van velden, eigenschappen, methodeparameters, return types, en gedelegeerden in de DataStore
klasse. Bijvoorbeeld, Data
is generieke eigenschap omdat we een type parameter T
als zijn type hebben gebruikt in plaats van het specifieke gegevenstype.
T
als een type parameter te gebruiken. U kunt elke naam geven aan een type parameter., Over het algemeen wordt T
gebruikt wanneer er slechts één typeparameter is. Het wordt aanbevolen om een meer leesbare parameter naam te gebruiken zoals TSession
, TKey
, TValue
etc. Meer informatie over type Parameter Naming Guidelines u kunt ook meerdere type parameters definiëren, gescheiden door een komma.
instantiating Generic Class
u kunt een instantie van generieke klassen maken door een feitelijk type tussen hoekhaken op te geven., Het volgende maakt een instantie aan van de generieke klasse DataStore
.
hierboven hebben we het string
type tussen de hoekhaken gespecificeerd tijdens het aanmaken van een instantie. Dus, T
zal worden vervangen door een string
type waar T
wordt gebruikt in de hele klasse tijdens het compileren. Daarom zou de eigenschap Data
een string
zijn.
de volgende figuur illustreert hoe generica werkt.,
u kunt een tekenreekswaarde toewijzen aan de eigenschap Data
. Proberen om andere waarden dan string toe te wijzen zal resulteren in een compilatie-tijd fout.
u kunt de verschillende gegevenstypen voor verschillende objecten opgeven, zoals hieronder getoond.
Generieke Klasse kenmerken
- een generieke klasse verhoogt de herbruikbaarheid. Hoe meer type parameters betekenen meer herbruikbaar het wordt., Echter, te veel generalisatie maakt code moeilijk te begrijpen en te onderhouden.
- een generieke klasse kan een basisklasse zijn voor andere generieke of niet-generieke klassen of abstracte klassen.
- een generieke klasse kan worden afgeleid van andere generieke of niet-generieke interfaces, klassen of abstracte klassen.
Generieke velden
een generieke klasse kan generieke velden bevatten. Het kan echter niet worden geïnitialiseerd.
de volgende declareert een generische array.,
Generieke methoden
een methode die is gedeclareerd met de typeparameters voor zijn return type of parameters wordt een generieke methode genoemd.
hierboven zijn de methoden AddorUpdate()
en GetData()
generieke methoden. Het werkelijke gegevenstype van de item
parameter zal worden gespecificeerd op het moment dat de DataStore<T>
klasse wordt geïnstalleerd, zoals hieronder wordt getoond.,
het generieke parameter type kan worden gebruikt met meerdere parameters met of zonder niet-generieke parameters en return type. De volgende regels zijn geldig generieke methode overbelasting.
een niet-generieke klasse kan generieke methoden bevatten door een typeparameter op te geven tussen hoekhaken met de methodenaam, zoals hieronder getoond.
voordelen van generica
- Generica verhogen de herbruikbaarheid van de code. U hoeft geen code te schrijven om verschillende gegevenstypen te verwerken.
- Generica zijn typeveilig., Je krijgt fouten in de compilatietijd als je een ander gegevenstype probeert te gebruiken dan het type dat in de definitie is opgegeven.
- Generic heeft een prestatievoordeel omdat het de mogelijkheden van boksen en unboxen verwijdert.