1 / 16

Mechanizm refleksji i StackTrace

Mechanizm refleksji i StackTrace. Artur Paech Przemko Robakowski. Plan prezentacji. Refleksja Co to i do czego można to wykorzystać? Wczytywanie assemblies Tworzenie obiektów i wywoływanie metod Dynamiczne tworzenie typów StackTrace Co to jest i do czego może być przydatne?

alodie
Télécharger la présentation

Mechanizm refleksji i StackTrace

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mechanizm refleksji i StackTrace Artur Paech Przemko Robakowski

  2. Plan prezentacji • Refleksja • Co to i do czego można to wykorzystać? • Wczytywanie assemblies • Tworzenie obiektów i wywoływanie metod • Dynamiczne tworzenie typów • StackTrace • Co to jest i do czego może być przydatne? • Opis klasy StackTrace • Przykłady

  3. Mechanizm refleksji • Mechanizm pozwalający na dynamiczne wczytywanie assemblies, dynamiczne tworzenie typów, obiektów i wywoływanie metod w zależności od kodu programu

  4. Wczytywanie assemblies • Assembly.Load – ładuje assembly o podanej nazwie, najczęściej z GAC • Assembly.LoadFile – ładuje assembly o podanej nazwie pliku • Assembly.LoadFrom – ładuje assembly o podanej nazwie pliku lub ścieżce • Assembly.ReflectionOnlyLoad • Assembly.ReflectionOnlyLoadFrom

  5. Tworzenie obiektów i wywoływanie metod • Tworzymy obiekt typu Type (Assembly.GetType lub typeOf) • Tworzenie obiektu: • Tworzymy obiekt typu ContstructorInfo (metodą GetConstructor) • Wywołujemy jego metodę invoke z tablicą obiektów, które mają być przekazane jako parametry • Wywoływanie metody: • Tworzymy obiekt typu MethodInfo (metoda GetMethod) • Wywołujemy jego metodę invoke – 1 argument to obiekt na rzecz którego wywołujemy metodę, dalej tablica z parametrami

  6. Dostęp do innych składowych typu: • GetProperty, GetField, GetMembers • BindingFlags: • DeclaredOnly – tylko zadeklarowane (bez dziedziczenia • FlattenHeirarchy – zadeklarowane, odziedziczone i protected • Public – publiczne • NonPublic – niepubliczne • Static – statyczne • Instance – należące do instancji klasy (nie statyczne) • IgnoreCase – ignoruje wielkość liter

  7. Dynamiczne tworzenie typów • AssemblyBuilder • ConstructorBuilder • EnumBuilder • EventBuilder • FieldBuilder • LocalBuilder • MethodBuilder • ModuleBuilder • ParameterBuilder • PropertyBuilder • TypeBuilder

  8. Refleksja - przykład

  9. StackTrace – Co to jest? • Stacktrace jest to klasa, która zawiera aktualną i uporządkowaną kolekcję ramek stosu (tj. tablica obiektów typu StackFrame) • Zawiera informację w formie tablicy jednowymiarowej • Uporządkowaną tzn. w odwrotnej kolejności niż zostały klasy/metody wywoływane (na pozycji [0] mamy „najświeżej” wywołaną metodę/klasę, na końcu mamy najbardziej ogólnę klasę np. „main”)

  10. StackTrace – przydatność • Przy bardzo zagnieżdżonych wykonaniach kodu • Możliwość logowania działań stosu • Nie potrzeba wyrzucać wyjątku, aby dowiedzieć się co kotek ma w środku ;)

  11. Klasa StackTrace – cz. I • Konstruktory • StackTrace() • StackTrace(Boolean) • StackTrace(Exception) • StackTrace(Int32) • StackTrace(StackFrame) • StackTrace(Exception, Boolean) • StackTrace(Exception, Int32) • StackTrace(Int32, Boolean) • StackTrace(Thread, Boolean) • StackTrace(Exception, Int32, Boolean)

  12. Klasa StackTrace – cz. II • Właściwości • FrameCount • Metody • Equals(Object) • Finalize() • GetFrame() • GetFrames() • GetHashCode() • GetType() • MemberwiseClone() • ToString()

  13. Klasa StackFrame • Konstruktory • StackFrame() • StackFrame(Boolean) • StackFrame(Int32) • StackFrame(Int32, Boolean) • StackFrame(String, Int32) • StackFrame(String, Int32, Int32) • Metody • GetFileColumnNumber() • GetFileLineNumber() • GetFileName() • GetMethod()

  14. StackTrace&StackFrame - Przykład • class Program { • static void Main(string[] args) { • TestClass.GoNow(); } • } • classTestClass { • public static void GoNow() { • var stackTrace = newStackTrace(true); • foreach (var r in stackTrace.GetFrames()) • { • Console.WriteLine("Filename: {0} Method: {1} Line: {2} Column: {3} ", • r.GetFileName(), r.GetMethod(), r.GetFileLineNumber(), • r.GetFileColumnNumber()); • } } }

  15. Na wyjściu programu • Filename: C:\Users\Artur\Desktop\PW lab\ConsoleApplication1\ConsoleApplication1\Program.cs Method: Void GoNow() Line: 24 Column: 7 • Filename: C:\Users\Artur\Desktop\PW lab\ConsoleApplication1\ConsoleApplication1\Program.cs Method: Void Main(System.String[]) Line: 13 Column: 7

  16. Bibliografia • msdn.microsoft.com

More Related