|
|
Opslået på 28/01/2019 16.03.40
|
|
|
|

1. Hvad er generisk?
Generics er ny syntaks introduceret i C# 2.0, ikke syntakssukker, men funktioner leveret af framework-opgraderinger i 2.0.
Når vi programmerer programmer, støder vi ofte på moduler med meget lignende funktioner, men de håndterer forskellige data. Men vi har ikke andet valg end at skrive flere metoder separat for at håndtere forskellige datatyper. På nuværende tidspunkt er spørgsmålet, om der er en måde at bruge den samme metode til at håndtere forskellige typer parametre? Fremkomsten af generika er specifikt designet til at løse dette problem.
2. Hvorfor bruge generiske
Lad os se på følgende eksempel:
Udfald:
Ud fra ovenstående resultater kan vi se, at disse tre metoder har de samme funktioner bortset fra de forskellige parametre, de passerer. På tidspunktet for version 1.0 fandtes der ikke noget generisk koncept, så hvad skulle man gøre. Jeg tror, mange vil tænke på arven af en af de tre hovedfunktioner i OOP; vi ved, at i C# er objektet basisklassen for alle typer, og ovenstående kode er optimeret som følger:
Udfald:
Ud fra ovenstående resultater kan vi se, at brugen af Objekt-typen opfylder vores krav og løser genanvendeligheden af koden. Nogle spørger måske, hvorfor det er muligt at sende int, string osv. ind, når det er defineret som en objekttype? Der er to grunde:
1. Objekttypen er forældreklassen for alle typer.
2. Gennem arv har underklasser alle attributter og adfærd fra forældreklassen, og hvor end forældreklassen optræder, kan den erstattes af underklasser.
Men ovenstående objekttypemetode medfører et andet problem: indpakning og unboxing kan reducere programmets ydeevne.
Microsoft introducerede generiske i C# 2.0, som kan løse ovenstående problemer meget godt.
3. Generiske typeparametre
I en generisk type- eller metodedefinition er en typeparameter en pladsholder, som klienten specificerer for en specifik type, når den instansierer en variabel af den generiske type. Den generiske klasse (GenericList<T>) kan ikke bruges som den er, fordi den ikke er en ægte type; Det er mere som en blueprint for typer. For at bruge GenericList <T>skal klientkoden erklære og instansiere en konstruktionstype ved at angive typeparameteren inden for hjørneparenteser. Typeargumentet for denne specifikke klasse kan være enhver type, som compileren genkender. Du kan oprette et vilkårligt antal konstrukttype-instanser, hver med en forskellig typeparameter.
Koden i ovenstående eksempel kan ændres som følger:
Kald:
Showresultater:
|
Tidligere:.NET Core FiludbydereNæste:MySQL-databasenavn, tabelnavn og feltnavn-forespørgsel
|