C# Refleksja

C# Refleksja
Jak sama nazwa wskazuje, odbicie jest czymś, co daje obraz o czymś. W ramach C#odbicie jest dobrze znana przestrzeń nazw znaleziona w bibliotece „systemowej”, aby zobaczyć metadane na temat klas, metod, parametrów lub typów. Zawiera wiele klas i atrybutów, aby uzyskać różne informacje dotyczące aspektów kodu. Tak więc postanowiliśmy wykonać kilka bardzo prostych przykładów do opracowania użycia przestrzeni nazw refleksji wraz z jej atrybutami. Zacznijmy od tworzenia pliku C#.

Przykład nr 01:

Pierwsze kroki z pierwszym przykładem będziemy patrzeć na opracowanie użycia „Systemu.Klasa refleksyjna ”do znalezienia informacji o metadanych dotyczących różnych typów, metod lub pól. Tak więc rozpoczęliśmy ten kod przy użyciu biblioteki systemowej, a potem zastosowaliśmy „system.Klasa refleksji ”w kodzie. Rozpoczęliśmy test przestrzeni nazw i test klasowy w nim.

Ten test klasowy zawiera pojedynczą funkcję „Main ()”, która będzie naszą funkcją sterownika dla tego kodu. Funkcja main () została uruchomiona od słowa kluczowego „Typ”, ładując typ „T1” ciągu za pomocą funkcji „typeOF ()” z klasy systemowej. „Typ” pojawił się z klasy refleksji. Teraz zastosowano tę samą procedurę do załadowania rodzaju T2 i T3 odpowiednio liczb całkowitych i postaci. Jak wiemy, klasa refleksyjna wymyśliła wiele atrybutów metadanych, aby znaleźć informacje dotyczące typów, metod i pól.

Użyjemy więc tych atrybutów metadanych, aby znaleźć informacje dotyczące typów T1, T2 i T3. W ten sposób użyliśmy trzech konsoli.Instrukcje funkcji writeLine () do wyświetlenia nazwy, pełnej nazwy, przestrzeni nazw i podstawy typu T1, T2 i T3 osobno. W tym celu wykorzystaliśmy atrybuty „nazwy”, „FullName”, „przestrzeni nazw” i „podstawy” klasy refleksyjnej w kodzie.

Kompilowaliśmy to nowo wykonane „Refleksja.plik CS ”z kompilatorem C#„ MCS ”już wbudowanym w naszym systemie Linux. Wygenerowano plik „exe” dla tego kodu i użyliśmy go do uruchomienia skompilowanego kodu z poleceniem „mono”. Wyjście wyświetlane na naszym ekranie pokazuje nam nazwę, pełną nazwę, przestrzeń nazw i podstawy podstawowej informacji dla łańcucha typu, liczb całkowitych i znaków.

Przykład nr 02:

W naszym pierwszym przykładzie otrzymaliśmy informacje dotyczące typu w metadanych C# za pomocą atrybutów klasy refleksyjnej. Będziemy używać klasy refleksyjnej, aby uzyskać informacje o metadanych dotyczących załadowanego „Zespół.”Tak więc rozpoczynaliśmy nasz przykład od użycia biblioteki„ systemowej ”w pierwszym wierszu i używając„ systemu.Klasa refleksji ”w drugiej linii.

Ten kod zawiera test przestrzeni nazw z tym samym testem klasy nazwy. W tym teście klasowym używamy funkcji sterownika Main (), aby rozpocząć wykonywanie naszego systemu. W ramach funkcji main () wykonywanie zaczyna się od załadowania zespołu „t.„Ta załadowana zmienna montażowa„ T ”otrzyma informacje o metadanych dotyczących montażu„ int ”C# za pomocą funkcji„ typeof ”za pomocą„ int ”, a następnie słowa kropki i„ montażu ”. Następna dokładna linia ma konsolę.WriteLine () funkcja wyświetlania informacji o metadanych dotyczących montażu „t.„Klasa i przestrzeń nazw są wypełnione tutaj, a kod jest zapisywany do użycia.

Skompilowaliśmy ten nowo wykonany kod C# z kompilatorem „MCS”, a następnie wykonaliśmy go z wykonawcą środowiska wykonawczego „Mono” dla C# w Ubuntu 20.04. Wyświetlał nazwę biblioteki „t” jako „mscorlib”, jej wersji, kulturze i tokena klucza publicznego na naszym ekranie pod spodem.

Przykład nr 03:

W naszym ostatnim przykładzie przyjrzymy się informacji o metadanych dla wszystkich klas, metod, atrybutów lub parametrów używanych w kodzie za pośrednictwem klasy refleksyjnej. Tak więc rozpoczynaliśmy ten kod z tym samym wzorem kodu, jak użyliśmy w powyższych dwóch przykładach, i.mi., użycie biblioteki systemowej i „systemu.Klasa refleksji ”. Utworzono przestrzeń nazw „nową”, która zawiera dwie klasy, ja.mi., Informacje i test.

Porozmawiajmy najpierw w klasie „Info”. W tej klasie używamy definiowania właściwości lub zmiennych, których musimy użyć w tym kodzie, i.mi., Wiek typu int i nazwa typu ciągu. Atrybuty „Get” i „Set” są wykorzystywane do uzyskania wartości zarówno dla obu wartości i przypisania ich odpowiednio do wieku i nazwy zmiennych. Oto dwie funkcje konstruktora w informacji o klasie. Pierwszy konstruktor nie ma parametrów, podczas gdy drugi to sparametryzowany konstruktor otrzymuje wartości w nowych zmiennych „A” i „N.„Prosty konstruktor inicjuje wartości zmiennego wieku i nazwiska odpowiednio do 25 i„ pustych ”.

Z drugiej strony drugi konstruktor przypisuje wartości zmiennych losowych do zmiennych wiekowych i nazwy, i.mi., pusty. Do wyświetlania zmiennej „wiek” i „nazwa” zdefiniowanej przez użytkownika funkcję „show ()”.04 Korzystanie z funkcji WriteLine () z klasy konsoli biblioteki systemowej. Pierwsza klasa została ukończona tutaj.

Omówmy klasę „testu”, w której wykorzystaliśmy atrybuty „refleksji”, aby uzyskać informacje o metadanych dotyczących kodu. Zawiera więc metodę main (), która jest naszym wykonawcą tego kodu. Załadowaliśmy obiekt do montażu klasy „ASB”, aby uzyskać aktualnie wykonujący zespół za pomocą funkcji „getExecutingassembly”. Ten obiekt „ASB” został użyty do wywołania funkcji „getTypes ()” do przechowywania informacji typu montażowego w tablicy typu „T."

Teraz nadszedł czas, aby iterować każdy typ z montażu i uzyskać informacje dotyczące jego metadanych. Tak więc, w ramach pierwszej pętli „foreach”, iterowaliśmy typ używany w kodzie za pośrednictwem tablicy typu „T”, i.mi., zajęcia. Nazwa wszystkich użytych klas zostanie wyświetlona przez atrybut „Nazwa” klasy refleksyjnej. Tablica „Met” typu MethodInfo została zainicjowana, aby uzyskać całkowitą metody w określonej klasie za pomocą iteratora „I.„Wewnętrzna pętla„ foreach ”służy do wyświetlania nazwy każdej metody w określonej klasie za pomocą atrybutu nazwy.

Tablica typu parameterInfo „PAR” jest zdefiniowana, aby uzyskać informacje o parametrze dla wszystkich metod w określonej klasie za pomocą funkcji „getParameters ()”. Ostatnia pętla wewnętrzna jest używana do iterowania wszystkich parametrów „P” znalezionych w tablicy „par” do wyświetlenia nazwy parametru i parametru na powładzie za pomocą nazwy i atrybutu parametrów klasy odbicia. Nasz kod jest teraz kompletny i gotowy do kompilacji.

Informacje o metadanych dotyczących „informacji” i „testowych” są wyświetlane osobno. Klasy mają metody typu INT parametrów; Metody typu ciągu; i metody typu obiektów

Wniosek:

W ten sposób można wykorzystać klasę przestrzeni refleksyjnej do uzyskiwania informacji o metadanych dotyczących metod, typów, parametrów, zespołów i klas. W ramach naszych pierwszych dwóch przykładów omówiliśmy użycie nazwy, pełnej nazwy, przestrzeni nazw, atrybutu podstawowego klasy refleksyjnej, aby uzyskać informacje dotyczące załadowanych typów i montażu, i.mi., int, char, string. W ostatnim przykładzie użyliśmy getTypes, getMethods (), getParameters oraz atrybut nazwy i parametru typu refleksyjnego, aby uzyskać metadane na temat całego kodu.