Cz.7
description
Transcript of Cz.7
Agenda
Przypomnienie zeszłego semestruCo to jest refleksja?Refleksja w C#Pierwsze zadanieAtrybutyDo 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.aspxEwentualnie resharper…
Przypomnienie - Kolekcje
Pętla foreachIEnumerableList, Dictionary
List<T>, Dictionary<T,U>
Przypomnienie – IO
File, DirectoryStreamReader, BinaryReader
Przypomnienie – pytania?
Co to jest refleksja?RTTI – RunTime Type 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#
TypeGetType()typeof()
Kompletna informacja o typie:NazwaRodzajPola, metody, zdarzeniaAtrybuty
Refleksja w C#
MethodInfoNazwaParametryZwracany typKlasa gdzie była zadeklarowanaItp…
ConstructorInfoPodobnie
InvokeWywołanie metody lub stworzenie obiektu
Pozostałe
Typeof(string[])GetElementType()
Wartości enum’ówGetery i Setery dla propertyParametry generyczne
StackTrace
Dobieranie się do metod wyżejnew StackTrace();
Wykorzystywane w logowaniust.GetFrame([1,2,,n]).Name
I profilowaniuKosztowne!
Pierwszy program
Parametry linii poleceńStwórzcie klasę ConsoleAppW 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 obiekcieStworzyć właściwą klasę aplikacji i załadować parametry
Atrybuty
Metadane w kodzieMożna dodawać praktycznie na wszystkimPrzykłady
[Serializable][Obsolete][STAThread]
By definiować własne dziedziczymy z klasy AttributeMożna dodać [AtributeUsage]
Do dzieła
Poprzedni program ma pewne wady:Wszystkie property są jednakowo traktowaneint Size vs int AccountBalance
Dodajcie atrybuty ConsoleParam(object defaultValue)ConsoleValidator(Type validator)
Zmieńcie metodę parsującą by dostosować ją do nowych atrybutów