Mechanizm refleksji i StackTrace

16
Mechanizm refleksji i StackTrace Artur Paech Przemko Robakowski

description

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? - PowerPoint PPT Presentation

Transcript of Mechanizm refleksji i StackTrace

Page 1: Mechanizm refleksji i  StackTrace

Mechanizm refleksji i StackTrace

Artur PaechPrzemko Robakowski

Page 2: Mechanizm refleksji i  StackTrace

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

Plan prezentacji

Page 3: Mechanizm refleksji i  StackTrace

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

Mechanizm refleksji

Page 4: Mechanizm refleksji i  StackTrace

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

Wczytywanie assemblies

Page 5: Mechanizm refleksji i  StackTrace

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

Tworzenie obiektów i wywoływanie metod

Page 6: Mechanizm refleksji i  StackTrace

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

Page 7: Mechanizm refleksji i  StackTrace

AssemblyBuilder ConstructorBuilder EnumBuilder EventBuilder FieldBuilder LocalBuilder MethodBuilder ModuleBuilder ParameterBuilder PropertyBuilder TypeBuilder

Dynamiczne tworzenie typów

Page 8: Mechanizm refleksji i  StackTrace

Refleksja - przykład

Page 9: Mechanizm refleksji i  StackTrace

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”)

StackTrace – Co to jest?

Page 10: Mechanizm refleksji i  StackTrace

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 ;)

StackTrace – przydatność

Page 11: Mechanizm refleksji i  StackTrace

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)

Klasa StackTrace – cz. I

Page 12: Mechanizm refleksji i  StackTrace

Właściwości◦ FrameCount

Metody◦ Equals(Object)◦ Finalize()◦ GetFrame() ◦ GetFrames()◦ GetHashCode()◦ GetType()◦ MemberwiseClone()◦ ToString()

Klasa StackTrace – cz. II

Page 13: Mechanizm refleksji i  StackTrace

Konstruktory◦ StackFrame()◦ StackFrame(Boolean)◦ StackFrame(Int32)◦ StackFrame(Int32, Boolean)◦ StackFrame(String, Int32)◦ StackFrame(String, Int32, Int32)

Metody◦ GetFileColumnNumber()◦ GetFileLineNumber()◦ GetFileName()◦ GetMethod()

Klasa StackFrame

Page 14: Mechanizm refleksji i  StackTrace

class Program { static void Main(string[] args) { TestClass.GoNow(); } } class TestClass { public static void GoNow() { var stackTrace = new StackTrace(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()); } } }

StackTrace&StackFrame - Przykład

Page 15: Mechanizm refleksji i  StackTrace

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

Na wyjściu programu

Page 16: Mechanizm refleksji i  StackTrace

msdn.microsoft.com

Bibliografia