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.