C# Riflessione

C# Riflessione
Come suggerisce il nome, la riflessione è qualcosa che fornisce un'immagine di informazione su qualcosa. All'interno di C#, una riflessione è uno spazio dei nomi ben noto che si trova nella libreria del "sistema" per vedere i metadati su classi, metodi, parametri o tipi. Contiene molte classi e attributi per ottenere diverse informazioni sugli aspetti del codice. Quindi, abbiamo deciso di eseguire alcuni esempi molto semplici per elaborare l'uso dello spazio dei nomi di riflessione insieme ai suoi attributi. Iniziamo con la creazione di file C#.

Esempio # 01:

Introduzione al primo esempio, esamineremo l'elaborazione dell'uso del "sistema.Classe di riflessione "per trovare informazioni sui metadati su diversi tipi, metodi o campi. Quindi, abbiamo avviato questo codice con l'uso della libreria di sistema e, successivamente, abbiamo utilizzato il "sistema.Classe di riflessione "nel codice. Abbiamo iniziato un test dello spazio dei nomi e un test di classe al suo interno.

Questo test di classe contiene un'unica funzione, "main ()" che sarà la nostra funzione del driver per questo codice. La funzione principale () è stata avviata con la parola chiave "tipo", caricando un tipo "T1" di una stringa tramite la funzione "typeof ()" dalla classe di sistema. Il "tipo" è venuto dalla classe di riflessione. Ora, la stessa procedura è stata utilizzata per caricare rispettivamente il tipo di T2 e T3 di un numero intero e un carattere. Come sappiamo che la classe di riflessione ha escogitato molti degli attributi dei metadati per scoprire le informazioni su tipi, metodi e campi.

Quindi, useremo quegli attributi dei metadati qui per trovare informazioni sui tipi T1, T2 e T3. Pertanto, abbiamo usato tre console.Dichiarazioni di funzione WriteLine () per visualizzare il nome, il fullname, lo spazio dei nomi e il basetype di tipo T1, T2 e T3 separatamente. Per questo, abbiamo utilizzato il "nome", "fullname", "spazio dei nomi" e "basetype" di attributi di una classe di riflessione qui nel codice.

Abbiamo compilato questa nuova "riflessione.File CS "con il compilatore C#" MCS "già integrato nel nostro sistema Linux. Il file "EXE" per questo codice è stato generato e lo abbiamo utilizzato per eseguire il codice compilato con il comando di runtime "mono". L'output visualizzato sulla nostra schermata ci mostra il nome, il nome full, lo spazio dei nomi e le informazioni basitype per la stringa, intera e carattere caricato.

Esempio # 02:

Nel nostro primo esempio, abbiamo ottenuto informazioni sul tipo di metadati C# usando gli attributi della classe di riflessione. Useremo la classe di riflessione per ottenere informazioni sui metadati relativi all'assemblaggio caricato."Quindi, abbiamo iniziato il nostro esempio con l'uso della libreria" Sistema "nella prima riga e utilizzando il" sistema.Classe di riflessione "nella seconda riga.

Questo codice contiene un test dello spazio dei nomi con lo stesso nome della classe. In questo test di classe, abbiamo utilizzato la funzione driver principale () per iniziare a eseguire il nostro sistema. All'interno della funzione principale (), l'esecuzione inizia dal caricamento di un gruppo “T."Questa variabile di assemblaggio caricato" T "riceverà le informazioni sui metadati relativa all'assembly" int "di C# tramite la funzione" typeof "usando" int "al suo interno, seguito dalla parola chiave DOT e" Assembly ". La prossima riga esatta ha la console.Funzione WriteLine () per visualizzare le informazioni sui metadati relativi all'assembly “T."Lo spazio di classe e nomi viene completato qui e il codice viene salvato per l'uso.

Abbiamo compilato questo codice C# appena realizzato con il compilatore "MCS" e quindi eseguito con l'esecutore di runtime "mono" per C# in Ubuntu 20.04. Ha visualizzato il nome di una libreria per l'assemblaggio "T" come "mscorlib", la sua versione, cultura e token chiave pubblica sul nostro schermo sotto.

Esempio # 03:

Nel nostro ultimo esempio, daremo un'occhiata alle informazioni sui metadati per tutte le classi, metodi, attributi o parametri utilizzati nel codice tramite la classe di riflessione. Quindi, abbiamo iniziato questo codice con lo stesso modello di codice che abbiamo usato nei due esempi precedenti, io.e., l'uso della libreria di sistema e il "sistema.Classe di riflessione ". È stato creato uno spazio dei nomi che contiene due classi.e., Informazioni e test.

Discutiamo prima la classe "Informazioni". All'interno di questa classe, abbiamo usato la definizione delle proprietà o delle variabili che dobbiamo usare in questo codice, i.e., Età del tipo int e nome del tipo di stringa. Gli attributi "get" e "set" vengono utilizzati per ottenere il valore sia per i valori e assegnarli all'età e al nome delle variabili, rispettivamente. Ecco due funzioni di costruttore nelle informazioni sulla classe. Il primo costruttore non ha parametri, mentre l'altro è un costruttore parametrizzato che ottiene valori in nuove variabili “A” e “N."Il semplice costruttore inizializza i valori di età variabile e nome a 25 e" vuoto ", rispettivamente.

D'altra parte, l'altro costruttore ha assegnato valori variabili casuali alle variabili di età e nome, i.e., vuoto. La funzione "show ()" definita dall'utente è stata utilizzata qui per visualizzare i valori variabili "età" e "nome" sulla console di Ubuntu 20.04 Utilizzo della funzione WriteLine () dalla classe Console della libreria di sistema. La prima classe è stata completata qui.

Discutiamo della classe "Test" in cui abbiamo utilizzato gli attributi "Riflessione" per ottenere informazioni sui metadati sul codice. Quindi, contiene un metodo principale () che è il nostro esecutore per questo codice. Abbiamo caricato un oggetto per l'assemblaggio di classe "ASB" per ottenere l'assemblaggio attualmente in esecuzione con la funzione "getExecutingassembly". Questo oggetto "ASB" è stato usato per chiamare la funzione "getTypes ()" per archiviare le informazioni del tipo di assemblaggio all'interno dell'array di tipo "T."

Ora, è tempo di iterare ogni tipo dall'assemblea e ottenere informazioni sui suoi metadati. Quindi, all'interno del primo ciclo "foreach", abbiamo ripetuto il tipo utilizzato nel codice tramite l'array di tipo "t", i.e., classi. Il nome delle classi totali utilizzate verrà visualizzato dall'attributo "Nome" della classe di riflessione. Un array "Met" di tipo MethodInfo è stato inizializzato per ottenere metodi totali nella classe specifica usando l'iteratore "i."Un ciclo interno" foreach "viene utilizzato per visualizzare il nome di ciascun metodo all'interno della classe specifica tramite l'attributo nome.

L'array di tipo ParameterInfo "PAR" è definito per ottenere le informazioni sui parametri per tutti i metodi della classe specifica utilizzando la funzione "getparameters ()". L'ultimo ciclo interno viene utilizzato per iterare tutti i parametri "P" trovati nell'array "par" per visualizzare il nome del parametro e il parametroType nella shell usando il nome e l'attributo ParameterType della classe di riflessione. Il nostro codice è ora completo e pronto per la compilazione.

Le informazioni sui metadati riguardanti le classi "informazioni" e "test" vengono visualizzate separatamente. Le classi hanno metodi di tipo INT parametri; metodi di tipo stringa; e metodi del tipo di oggetto

Conclusione:

È così che può essere utilizzata una classe di spazio per i nomi di riflessione per ottenere informazioni sui metadati su metodi, tipi, parametri, assiemi e classi. All'interno dei nostri primi due esempi, abbiamo discusso dell'uso di nome, fullname, spazio dei nomi, attributo BaseType della classe di riflessione per ottenere informazioni sui tipi e l'assemblaggio caricato, i.e., int, char, stringa. Nell'ultimo esempio, abbiamo usato i getTypes, GetMethods (), GetParameters e l'attributo del nome e del tipo di parametro della classe di riflessione per ottenere metadati sull'intero codice.