A .NET osztályok felderítése

Az osztályok (típusok) felderítéséhez, a használatuk magyarázatához nagyon jól használhatjuk az Reflector  programot (részletesebben a 2.3.4 Reflector fejezetben):

 

41 . ábra A Reflector közvetlenül megnyitja a .NET osztály magyarázatát

Látható, hogy a helyi menüben rögtön meg tudja hívni nekünk az adott osztály vagy metódus magyarázatát az MSDN weboldalról.

Természetesen a get-member cmdlettel is kilistázhatók a statikus tagjellemzők a ‑static kapcsolóval. Alább például a [system.convert]  osztály ToInt32 metódusa látszik:

[19] PS C:\> [system.convert] | get-member ToInt32 -MemberType methods -stat

ic | ft -wrap

 

 

   TypeName: System.Convert

 

Name    MemberType Definition

----    ---------- ----------

ToInt32 Method     static System.Int32 ToInt32(String value, Int32 fromBase

                   ), static System.Int32 ToInt32(Object value), static Sys

                   tem.Int32 ToInt32(Object value, IFormatProvider provider

                   ), static System.Int32 ToInt32(Boolean value), static Sy

                   stem.Int32 ToInt32(Char value), static System.Int32 ToIn

                   t32(SByte value), static System.Int32 ToInt32(Byte value

                   ), static System.Int32 ToInt32(Int16 value), static Syst

                   em.Int32 ToInt32(UInt16 value), static System.Int32 ToIn

                   t32(UInt32 value), static System.Int32 ToInt32(Int32 val

                   ue), static System.Int32 ToInt32(Int64 value), static Sy

                   stem.Int32 ToInt32(UInt64 value), static System.Int32 To

                   Int32(Single value), static System.Int32 ToInt32(Double

                   value), static System.Int32 ToInt32(Decimal value), stat

                   ic System.Int32 ToInt32(String value), static System.Int

                   32 ToInt32(String value, IFormatProvider provider), stat

                   ic System.Int32 ToInt32(DateTime value)

Ezzel a metódussal a 2-es, 8-as és 16-os számrendszer számait lehet egésszé konvertálni:

[14] PS C:\> [system.convert]::ToInt32("F", 16)

15

[15] PS C:\> [system.convert]::ToInt32("111111", 2)

63

[16] PS C:\> [system.convert]::ToInt32(111111, 2)

63

Illetve visszafele is, például készíthetünk bináris számokat (a PowerShellben a System előtag el is hagyható az osztályok hivatkozásánál):

[17] PS C:\> [convert]::tostring(2516,2)

100111010100

Sőt! Hogy ez még szebb legyen, kiegészíthetjük az eredményt 16 számjegyre a PadLeft metódussal:

[18] PS C:\> [convert]::tostring(2516,2).padleft(16,"0")

0000100111010100

Nézzük kicsit jobban meg a Reflectorral a különböző .NET osztályokat! Keressük például meg a PowerShell osztályait, amelyeket a System.Management.Automation névtérben keresendők. Igazából nem gyakran kell ide járkálni, néhány típus belső világáról azonban gyűjthetünk hasznos információkat:

42 . ábra A ReadKeyOption felderítése

A fenti példában például meg tudjuk nézni, hogy a ReadKey metódusnak milyen opciói vannak. A ReadKey metódussal a 2.1.5.3 Lépjünk kapcsolatba a konzolablakkal ($host) fejezetben lesz részletesen szó.

Vagy a függvények paramétereinek ellenőrzését lehetővé tevő osztályokat is felderíthetjük:

43 . ábra Validálási osztályok felderítése

Ezekről részletesen a 1.6.2.9 Paraméterek, változók ellenőrzése (validálás) fejezetben lesz szó.

Sok esetben egy frissen létrehozott objektum tagjellemzőit szeretnénk felderíteni. Például egy új system.collections.arraylist típusú objektumét:

[1] PS C:\> $o = New-Object collections.arraylist

[2] PS C:\> $o | get-member

Get-Member : No object has been specified to the get-member cmdlet.

At line:1 char:8

+ $o | gm <<<<

    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationE

   xception

    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Comman

   ds.GetMemberCommand

Ha ezt a csövezős módszert használjuk, akkor hibát kaptunk. Viszont, ha az InputObject paramétereként adjuk át az objektumot, akkor már megkapjuk a keresett tagjellemzőket:

[3] PS C:\> Get-Member -InputObject $o

 

 

   TypeName: System.Collections.ArrayList

 

Name           MemberType            Definition

----           ----------            ----------

Add            Method                int Add(System.Object value)

AddRange       Method                System.Void AddRange(System.Collection...

BinarySearch   Method                int BinarySearch(int index, int count,...

Clear          Method                System.Void Clear()

Clone          Method                System.Object Clone()

Contains       Method                bool Contains(System.Object item)

Ennek oka, hogy a csővezetéken csak „valami” mehet keresztül, márpedig a példámban egy üres ArrayList az „semminek” számít, legalábbis a csővezetéken történő továbbítás szempontjából. Viszont hagyományos paraméterezéssel lekérdezhetők a tagjellemzők, mint ahogy láttuk.



Word To HTML Converter