Jaki jest najszybszy spos贸b, aby sprawdzi膰, jak zbudowana jest dana klasa z BCL? Jakie ma metody, w艂a艣ciwo艣ci? Niekt贸rzy z pewno艣ci膮 poprosz膮 o pomoc wujka Google, kt贸ry z ch臋ci膮 przerzuci zainteresowanych na witryn臋 MSDN Library. Miejsce to oczywi艣cie godne polecenia ka偶demu, bo jak ma艂o kt贸ra dokumentacja jest naprawd臋 szczeg贸艂owa. Ale co w sytuacji, gdy nie mamy dost臋pu do internetu? Najprostszym sposobem by艂oby stworzenie na szybko jakiej艣 aplikacji, wpisanie nazwy klasy i IntelliSense powinien podpowiedzie膰 nam ca艂膮 reszt臋. Sprytnie, ale troch臋 ci臋偶ko. Zaznajomieni ze 艣rodowiskiem Visual Studio wiedz膮, 偶e istnieje co艣 takiego, jak Object Browser dost臋pny z menu Tools. Narz臋dzie ca艂kiem przydatne, a dodatkowo informuje, w jakim zestawie dost臋pna jest dana klasa. Ostatnim sposobem, na kt贸rym chcia艂bym si臋 dzi艣 skoncentrowa膰, jest PowerShell. Jak prze艣wietla膰 klasy i jak ich u偶ywa膰 w skryptach –聽 o tym w dalszej cz臋艣ci. Spokojnie, znajomo艣膰 super pow艂oki nie jest wymagana.
Aby zdoby膰 informacj臋 o danym typie, wystarczy wpisa膰 jego pe艂n膮 nazw臋, tj. razem z namespacesem w nawiasach kwadratowych:
PS C:UsersWojtek [System.IO.DriveType] IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True DriveType System.Enum
Jak wida膰, nie dostali艣my zbyt wielu cennych informacji . Do dyspozycji na szcz臋艣cie mamy wszystkie metody, jakie udost臋pnia klasa System.Type. Np. GetConstructors(), GetMembers(), GetFileds() itp. W podanych zastosowaniach b臋d臋 u偶ywa艂 komendy Format-Table, kt贸ra powoduje wy艣wietlenie tylko tych w艂a艣ciwo艣ci obiekt贸w, jakie chc臋 zobaczy膰.
PS C:UsersWojtek> [System.IO.DriveType].GetFields() | Format-Table Name Name ---- value__ Unknown NoRootDirectory Removable Fixed Network CDRom Ram
艁atwo i szybko dostali艣my wyliczenia danej enumeracji. Je艣li chcemy zobaczy膰, w jaki spos贸b dzia艂a dana funkcja, mo偶emy stworzy膰 obiekt dowolnej klasy, a nast臋pnie uruchamia膰 jego metody. Zobaczcie to na przyk艂adzie StringBuildera:
PS C:UsersWojtek> $a = New-Object System.Text.StringBuilder PS C:UsersWojtek> $a.Append("hej") Capacity MaxCapacity Length -------- ----------- ------ 16 2147483647 3 PS C:UsersWojtek> $a.Append(" ho") Capacity MaxCapacity Length -------- ----------- ------ 16 2147483647 6 PS C:UsersWojtek> $a.ToString() hej ho
Po ka偶dej zmianie obiektu wy艣wietlane s膮 jego w艂a艣ciwo艣ci i jak na d艂oni wida膰, co si臋 zmieni艂o. Bardzo przydatna rzecz podczas poznawania nowych klas.
Mo偶liwo艣ci PowerShella s膮 naprawd臋 ogromne, sam z pewno艣ci膮 nie jestem 艣wiadomy istnienia po艂owy z nich. Niecierpliwych odsy艂am do angielskiego bloga w kt贸rym znajdziecie mn贸stwo przyk艂ad贸w wykorzystania PowerShella na platformie .NET, a ciekawskich zach臋cam do eksperymentowania. Polecam PowerGUI jako podstawowy edytor PSa.