topomdc ha scritto:
Esiste un modo per vedere la implementazionde della procedura Dispose(), praticamente il codice?
Certo, con un reflector (o
decompiler).
Fino a pochi mesi fa c'era un ottimo reflector gratuito,
quello di RedGate, poi caduto in disgrazia nel momento in cui hanno rilasciato una nuova release a pagamento, al contempo facendo autodistruggere le vecchie versioni gratuite.
Di altri gratuiti conosco
ILSpy, che è un po' acerbo però fa il suo lavoro.
Oppure, c'è quello di Telerik,
JustDecompile, che sembra molto promettente anche se oggi è ancora una beta. Nel sito, hanno avuto cura di scrivere "Powerful, free decompiling FOREVER" come a rassicurare la community sul fatto che non incapperanno nella stessa défaillance di RedGate. Simpatici :)
Questi prodotti ti danno tutti la possibilità di cercare un tipo (es. Button) all'interno di un insieme di assembly. Quando il programma ti restituisce un risultato, fai doppioclick su di esso e potrai ispezionarlo. In particolare puoi conoscere:
- le classi da cui eredita e quelle che ereditano da esso;
- l'elenco dei suoi membri, come i campi, le proprietà e i metodi;
- il codice usato per implementare il .Dispose (o qualsiasi altro metodo). Il listato, di solito in C# o VB.NET, viene ottenuto "traducendo" il codice
CIL contenuto negli assembly.
La differenza tra un reflector e l'Object Browser di Visual Studio sta proprio in quest'ultimo punto.
Se ho capito giusto, l'interfaccia dichiara solo una procedura o un evento o una proprietà, queste devono poi essere implementate da qualche altra parte.
Esatto. Col reflector puoi vedere che il tipo System.Web.UI.WebControls.Button eredita da WebControl che a sua volta eredita da Control. Quest'ultimo implementa l'interfaccia IDisposable, ed è lì che dovrai cercare l'implementazione del metodo Dispose.
Tutta questa "navigazione" tra i tipi la fai comodamente da un menu ad albero. Quando trovi il metodo .Dispose, fai doppioclick e ti apparirà il codice.
Il reflector è anche un ottimo strumento di apprendimento, è una finestra sull'implementazione del .net framework.
ciao,
Modificato da BrightSoul il 14 luglio 2011 20.02 -