C # Generics (Svenska)
Generic betyder den allmänna formen, inte specifik. I C# betyder Generisk inte specifik för en viss datatyp.
c# låter dig definiera generiska klasser, gränssnitt, abstrakta klasser,fält, metoder, statiska metoder, egenskaper, händelser, delegater och operatörer som använder typparametern och utan den specifika datatypen. En typparameter är en platshållare för en viss typ som anges när du skapar en instans av den generiska typen.
en generisk typ deklareras genom att ange en typparameter i en vinkelfäste efter ett typnamn, t. ex., TypeName<T>
därT
är en typparameter.
Generisk klass
generiska klasser definieras med en typparameter i en vinkelfäste efter klassnamnet. Följande definierar en generisk klass.
ovan ärDataStore
en generisk klass., T
kallas typparameter, som kan användas som en typ av fält, egenskaper, metodparametrar, returtyper och delegater i klassen DataStore
. Till exempel är Data
Generisk egenskap eftersom vi har använt en typparameter T
som dess typ istället för den specifika datatypen.
T
som en typparameter. Du kan ge något namn till en typparameter., I allmänhet användsT
när det bara finns en typparameter. Det rekommenderas att använda ett mer läsbart parameternamn enligt krav som TSession
, TKey
, TValue
etc. Läs mer om riktlinjer för Typparameternamn Du kan också definiera flera typparametrar åtskilda av ett kommatecken.
Instantiating Generic Class
Du kan skapa en instans av generiska klasser genom att ange en faktisk typ i vinkelfästen., Följande skapar en instans av den generiska klassen DataStore
.
ovan angav vi typenstring
I vinkelfästena medan du skapade en instans. Så kommerT
att ersättas med enstring
skriv varhelstT
används i hela klassen vid kompilering. Därför skulle typen av Data
egenskap vara en string
.
följande figur visar hur generika fungerar.,
Du kan tilldela ett strängvärde till egenskapenData
. Att försöka tilldela andra värden än sträng resulterar i ett kompileringsfel.
Du kan ange olika datatyper för olika objekt, som visas nedan.
generiska klassegenskaper
- en generisk klass ökar återanvändbarheten. Ju fler typparametrar betyder mer återanvändbar blir det., Men för mycket generalisering gör koden svår att förstå och underhålla.
- en generisk klass kan vara en basklass till andra generiska eller icke-generiska klasser eller abstrakta klasser.
- en generisk klass kan härledas från andra generiska eller icke-generiska gränssnitt, klasser eller abstrakta klasser.
generiska fält
en generisk klass kan innehålla generiska fält. Det kan dock inte initieras.
följande deklarerar en generisk array.,
generiska metoder
en metod som deklareras med typparametrarna för dess returtyp eller parametrar kallas en generisk metod.
ovan är metodernaAddorUpdate()
och metodernaGetData()
generiska. Den faktiska datatypen för parametern item
kommer att anges när DataStore<T>
instanseras enligt nedan.,
den generiska parametertypen kan användas med flera parametrar med eller utan icke-generiska parametrar och returtyp. Följande är giltiga generiska metoden överbelastning.
en icke-generisk klass kan inkludera generiska metoder genom att ange en typparameter i vinkelfästen med metodnamnet, som visas nedan.
fördelar med generika
- generika ökar återanvändbarheten av koden. Du behöver inte skriva kod för att hantera olika datatyper.
- generika är typsäkra., Du får kompileringsfel om du försöker använda en annan datatyp än den som anges i definitionen.
- Generic har en prestationsfördel eftersom det tar bort möjligheterna att boxning och unboxing.