- Reflector .NET: un Visualizzatore
Oggetti con disassembler -
|
|||
COSA SERVE PER QUESTO TUTORIAL | |||
Chiedi sul FORUM | Glossario | cognizioni basiche di un qualsiasi linguaggio .Net | ||
Come servirsi di Reflector .NET per apprendere e correggere | |||
LE POTENZIALITÀ Cos'è Reflector .NET e qual è la sua utilità.
In un
precedente articolo abbiamo illustrato l'utilità e la potenza del
Visualizzatore Oggetti di Visual Studio, oggi vogliamo invece presentare
uno strumento simile ma infinitamente più potente:
.NET Reflector. .NET
Reflector è un software nato da Lutz Roeder e ora portato avanti dalla
Red Gate che si comporta sostanzialmente come un disassemblatore di
codice .Net. A partire da un qualsiasi assembly (libreria DLL o applicazione EXE)
potrete quindi risalire al codice sorgente originale con un grado di
fedeltà veramente eccezionale. Reflector, al contrario di ildasm, non si
limita a mostrare il sorgente in Intermediate Langauge (MSIL,
IL o ILAsm che lo si voglia chiamare) ma è in grado di convertirlo in tutti i
principali (e grazie ai plugin anche in quelli secondari) linguaggi
.Net: C#, VB.Net, Delphi, MC++ e così via. La visualizzazione è molto
simile a quella del Visualizzatore Oggetti di Visual Studio ma mostra
anche tutti i membri nascosti, privati e il loro rispettivo codice. Come si comporta in dettaglio il metodo Fill di OdbcDataAdapter. Ammettiamo di doverci servire di un
OdbcDataAdapter (classe utilizzata per effettuare query di selezione su
database tramite ODBC) ma di non ricordare se è necessario aprire la
connessione prima di chiamare il metodo Fill, o, se non necessario,
si
debba invece ricordarsi di chiuderla dopo la chiamata. Abbiamo tre modi
di procedere per risolvere il problema: consultare la guida, provare del
codice oppure andare a vedere come si comporta effettivamente il metodo
OdbcDataAdapter.Fill. Tra le tre possibilità, l'ultima è certamente la
più intrigante e quella che può arricchirci maggiormente (sebbene
probabilmente non la più veloce). num = Me.Fill(dataTables, 0, 0, selectCommand, fillCommandBehavior) Cliccando su Fill ci troveremo direttamente alla versione di Fill che ci interessa, ma anche qui vediamo una serie di controlli di scarso interesse e una chiamata ad un altro metodo, questa volta privato (altra pratica molto diffusa): num = Me.FillInternal(Nothing, dataTables, startRecord, maxRecords, Nothing, command, behavior) Clicchiamo su FillInternal e finalmente siamo giunti al cuore del metodo Fill e possiamo vedere chiamate ad un DataReader come ci si poteva aspettare; ma a parte questo ci sono due metodi di particolare interesse: Dim open As ConnectionState = ConnectionState.Open [...] Try DbDataAdapter.QuietOpen(connection, open) [...] Finally DbDataAdapter.QuietClose(connection, open) End Try Ispezioniamo il metodo QuietOpen: Private Shared Sub QuietOpen(ByVal connection As IDbConnection, ByRef originalState As ConnectionState) originalState = connection.State If (originalState Is ConnectionState.Closed) Then connection.Open End If End Sub Se la connessione non è aperta la apre, altrimenti non fa nulla, se
non impostare il parametro originalState (passato per riferimento) sullo
stato iniziale. Private Shared Sub QuietClose(ByVal connection As IDbConnection, ByVal originalState As ConnectionState) If ((Not connection Is Nothing) AndAlso (originalState = ConnectionState.Closed)) Then connection.Close End If End Sub Controlla semplicemente se la connessione esiste ancora e se
originalState (la stessa variabile che era stata passata a
QuietOpen) indica che la connessione era inizialmente chiusa, allora
la riporta in quello stato, ovvero la chiude. Altre funzionalità utili. Tra le altre funzionalità Reflector permette di
Esistono poi molti interessanti plugin che permettono di aggiungere
linguaggi verso i quali è possibile disassemblare o addirittura creare
un progetto utilizzabile in Visual Studio dell'assembly.
|
|||
<< INDIETRO | by VeNoM00 |