Cz.7
description
Transcript of Cz.7
![Page 2: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/2.jpg)
Agenda
Przypomnienie zeszłego semestruCo to jest refleksja?Refleksja w C#Pierwsze zadanieAtrybutyDo dzieła!
![Page 3: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/3.jpg)
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…
![Page 4: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/4.jpg)
Przypomnienie - Kolekcje
Pętla foreachIEnumerableList, Dictionary
List<T>, Dictionary<T,U>
![Page 5: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/5.jpg)
Przypomnienie – IO
File, DirectoryStreamReader, BinaryReader
![Page 6: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/6.jpg)
Przypomnienie – pytania?
![Page 7: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/7.jpg)
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.
![Page 8: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/8.jpg)
Refleksja w C#
TypeGetType()typeof()
Kompletna informacja o typie:NazwaRodzajPola, metody, zdarzeniaAtrybuty
![Page 9: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/9.jpg)
Refleksja w C#
MethodInfoNazwaParametryZwracany typKlasa gdzie była zadeklarowanaItp…
ConstructorInfoPodobnie
InvokeWywołanie metody lub stworzenie obiektu
![Page 10: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/10.jpg)
Pozostałe
Typeof(string[])GetElementType()
Wartości enum’ówGetery i Setery dla propertyParametry generyczne
![Page 11: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/11.jpg)
StackTrace
Dobieranie się do metod wyżejnew StackTrace();
Wykorzystywane w logowaniust.GetFrame([1,2,,n]).Name
I profilowaniuKosztowne!
![Page 12: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/12.jpg)
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
![Page 13: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/13.jpg)
Atrybuty
Metadane w kodzieMożna dodawać praktycznie na wszystkimPrzykłady
[Serializable][Obsolete][STAThread]
By definiować własne dziedziczymy z klasy AttributeMożna dodać [AtributeUsage]
![Page 14: Cz.7](https://reader036.fdocument.pub/reader036/viewer/2022082712/56813c09550346895da56f66/html5/thumbnails/14.jpg)
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