C# refleksjon

C# refleksjon
Som navnet antyder, er refleksjonen noe som gir et informasjonsbilde om noe. Innen C#er en refleksjon et kjent navneområde som finnes i "System" -biblioteket for å se metadata om klasser, metoder, parametere eller typer. Den inneholder mange klasser og attributter for å få forskjellig informasjon angående kodeaspektene. Så vi har bestemt oss for å utføre noen veldig enkle eksempler for å utdype bruken av refleksjonsnavnet sammen med dets attributter. La oss komme i gang med C# File Creation.

Eksempel # 01:

Kom i gang med det første eksemplet, vil vi se på utdypingen av bruken av “systemet.Reflection ”-klasse for å finne metadatainformasjon angående forskjellige typer, metoder eller felt. Så vi har startet denne koden med bruk av systembiblioteket, og etter det har vi brukt “Systemet.Refleksjon ”-klasse i koden. Vi har startet en navneområde -test og en klassetest i den.

Denne klassetesten inneholder en enkelt funksjon, “main ()” som kommer til å være vår driverfunksjon for denne koden. Main () -funksjonen er startet med nøkkelordet “Type”, lastet inn en type “T1” av en streng via “TypeOf ()” -funksjonen fra systemklassen. "Typen" kom opp fra refleksjonsklassen. Nå har den samme prosedyren blitt brukt til å laste inn typen T2 og T3 for henholdsvis et heltall og karakter. Som vi vet at refleksjonsklassen kom med mange av metadata -attributtene for å finne ut informasjonen angående typer, metoder og felt.

Så vi vil bruke disse metadata -attributtene her for å finne informasjon angående typer T1, T2 og T3. Dermed har vi brukt tre konsoll.WritLine () Funksjonsuttalelser for å vise navn, fullnavn, navneområde og basetype av type T1, T2 og T3 hver for seg. For dette har vi brukt "navnet" ".

Vi har samlet denne nyopplagte "refleksjonen.CS ”-filen med C# kompilatoren“ MCS ”som allerede er innebygd i Linux-systemet vårt. "EXE" -filen for denne koden er generert, og vi har brukt den til å kjøre den kompilerte koden med "mono" runtime -kommandoen. Utgangen som vises på skjermen vår viser oss navn, fullnavn, navneområde og basetypeinformasjon for lastet type streng, heltall og karakter.

Eksempel # 02:

I vårt første eksempel fikk vi informasjon angående type i C# metadata ved bruk av Reflection Class -attributtene. Vi vil bruke refleksjonsklassen for å få metadatainformasjon angående den lastede "enheten.”Så vi har startet eksemplet vårt med bruk av“ System ”-biblioteket i første linje og bruker“ Systemet.Refleksjon ”-klasse i den andre linjen.

Denne koden inneholder en navneområde -test med samme navneklasse -test. I denne klassetesten har vi brukt Main () driverfunksjonen for å begynne å utføre systemet vårt. Innenfor hovedfunksjonen () starter utførelsen fra å laste en samling “t.”Denne lastede monteringsvariabelen“ T ”vil få metadatainformasjonen angående“ int ”-montering av C# via“ Typeof ”-funksjonen ved å bruke“ Int ”i den, etterfulgt av DOT og“ Monterings ”-nøkkelordet. Den neste eksakte linjen har konsollen.WritLine () -funksjon for å vise metadatainformasjonen angående forsamlingen “t.”Klassen og navneområdet er fullført her, og koden lagres for bruk.

Vi har samlet denne nyopplagte C# -koden med "MCS" -kompilatoren og deretter utført den med "Mono" Runtime Executor for C# i Ubuntu 20.04. Den viste navnet på et bibliotek for "T" -montering som "mscorlib", dens versjon, kultur og offentlig nøkkel -token på skjermen vår under.

Eksempel # 03:

Innenfor vårt siste eksempel vil vi se på metadatainformasjonen for alle klasser, metoder, attributter eller parametere som brukes i koden via refleksjonsklassen. Så vi har startet denne koden med samme kodemønster som vi har brukt i de to ovennevnte eksemplene, jeg.e., Bruken av systembiblioteket og “systemet.Reflection ”-klasse. Det er opprettet et navneområde "nytt" som holder to klasser i det, jeg.e., Info og test.

La oss diskutere "info" -klassen først. Innenfor denne klassen har vi brukt å definere egenskapene eller variablene vi må bruke i denne koden, i.e., Alder på int -type og navn på strengtype. Attributtene "Get" og "Set" brukes for å få verdien for begge verdiene og tilordne dem til henholdsvis variablene alder og navn. Her er to konstruktørfunksjoner i klasseinfo. Den første konstruktøren har ingen parametere, mens den andre er en parameterisert konstruktør som får verdier i nye variabler “a” og “n.”Den enkle konstruktøren initialiserer verdiene for variabel alder og navn til henholdsvis 25 og" tom ".

På den annen side har den andre konstruktøren tilordnet tilfeldige variable verdier til alders- og navnevariabler, i.e., tømme. Den brukerdefinerte “show ()” -funksjonen har blitt brukt her for å vise variabelen 'Age' og 'Name' -verdiene på konsollen til Ubuntu 20.04 Bruke WritLine () -funksjonen fra konsollklassen i systembiblioteket. Første klasse er fullført her.

La oss diskutere "Test" -klassen der vi har brukt "Reflection" -attributtene for å få metadatainformasjon angående koden. Så den inneholder en Main () -metode som er vår eksekutor for denne koden. Vi har lastet et objekt for klassesamling “ASB” for å få den for øyeblikket utførende forsamlingen med 'getExecutingAssembly' -funksjonen '. Dette objektet “ASB” har blitt brukt til å kalle “getTypes ()” -funksjonen for å lagre monteringstypeinformasjonen i typen array “t.”

Nå er det på tide å iterere hver type fra forsamlingen og få informasjon om metadata. Så innen den første "foreach" -sløyfen har vi iterert den typen som brukes i koden via typen matrise "t," i.e., klasser. Navnet på de totale klassene som brukes vil vises av "Navn" -attributtet til refleksjonsklassen. En rekke "Met" av MethodInfo -typen er blitt initialisert for å få totale metoder i den spesifikke klassen ved bruk av iteratoren "I.”En indre“ foreach ”-sløyfe brukes til å vise navnet på hver metode i den spesifikke klassen via Navn -attributtet.

Parameterinfo -array "PAR" er definert for å få parameterinformasjonen for alle metodene i den spesifikke klassen ved å bruke "getParameters ()" -funksjonen. Den siste indre sløyfen brukes til å iterere alle parametrene "P" som finnes i "PAR" -arrayen for å vise parameternavnet og parametertypen ved skallet ved å bruke navnet og parametertype -attributtet til Reflection Class. Koden vår er nå komplett og klar for samling.

Metadatainformasjonen om "Info" og "Test" -klasser vises separat. Klassene har parameter INT -type metoder; Strengtype metoder; og objekttypemetoder

Konklusjon:

Slik kan en refleksjonsnavnsklasse brukes for å få informasjon om metadata angående metoder, typer, parametere, samlinger og klasser. Innenfor våre to første eksempler har vi diskutert bruken av navn, fullnavn, navneområde, basetype -attributt til refleksjonsklassen for å få informasjon angående lastede typer og montering, i.e., int, røye, streng. I det siste eksemplet har vi brukt GetTypes, GetMethods (), GetParameters, og navnet og parametertypen til Reflection Class for å få metadata om hele koden.