140 likes | 320 Views
C#. Refleksja, Atrybuty. Cz.7. k rzysiek.fediuk@gmail.com. Agenda. Przypomnienie zeszłego semestru Co to jest refleksja? Refleksja w C# Pierwsze zadanie Atrybuty Do dzieła!. Przypomnienie. Słowa kluczowe w C# Co to polimorfizm? Jak go osiągnąć MSDN Twoim przyjacielem
E N D
C# Refleksja, Atrybuty Cz.7 krzysiek.fediuk@gmail.com
Agenda • Przypomnienie zeszłego semestru • Co to jest refleksja? • Refleksja w C# • Pierwsze zadanie • Atrybuty • Do dzieła!
Przypomnienie • Słowa kluczowe w C# • Co to polimorfizm? • Jak go osiągnąć • MSDN Twoim przyjacielem • http://msdn.microsoft.com/en-us/library/gg145045.aspx • Ewentualnie resharper…
Przypomnienie - Kolekcje • Pętla foreach • IEnumerable • List, Dictionary • List<T>, Dictionary<T,U>
Przypomnienie – IO • File, Directory • StreamReader, BinaryReader
Co to jest refleksja? • RTTI – RunTimeType Information • Czy zmienna jest typu int czy string? • 1 vs ”1” • Refleksja pozwala w łatwy sposób zarządzać kodem tak, jakby był danymi.
Refleksja w C# • Type • GetType() • typeof() • Kompletna informacja o typie: • Nazwa • Rodzaj • Pola, metody, zdarzenia • Atrybuty
Refleksja w C# • MethodInfo • Nazwa • Parametry • Zwracany typ • Klasa gdzie była zadeklarowana • Itp… • ConstructorInfo • Podobnie • Invoke • Wywołanie metody lub stworzenie obiektu
Pozostałe • Typeof(string[]) • GetElementType() • Wartości enum’ów • Getery i Setery dla property • Parametry generyczne
StackTrace • Dobieranie się do metod wyżej • newStackTrace(); • Wykorzystywane w logowaniu • st.GetFrame([1,2,,n]).Name • I profilowaniu • Kosztowne!
Pierwszy program • Parametry linii poleceń • Stwórzcie klasę ConsoleApp • W niej metodę która przyjmuje obiekt klasy dziedziczącej i args • Jak to zrobić statycznie a jak niestatycznie? • Sparsować argumenty i ustawić wszystkie property w przekazanym obiekcie • Stworzyć właściwą klasę aplikacji i załadować parametry
Atrybuty • Metadane w kodzie • Można dodawać praktycznie na wszystkim • Przykłady • [Serializable] • [Obsolete] • [STAThread] • By definiować własne dziedziczymy z klasy Attribute • Można dodać [AtributeUsage]
Do dzieła • Poprzedni program ma pewne wady: • Wszystkie property są jednakowo traktowane • intSize vs intAccountBalance • Dodajcie atrybuty • ConsoleParam(objectdefaultValue) • ConsoleValidator(Typevalidator) • Zmieńcie metodę parsującą by dostosować ją do nowych atrybutów