Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Interfacce con costruttore static

Ieri Giancarlo mi ha chiesto via mail:

"Ho sempre avuto un dubbio... Perchè nella definizione di una interfaccia non c'è la possibilità di specificare anche una firma per eventuali costruttori?"

Gli rispondo qui per togliere eventualmente anche ad altri lo stesso dubbio.

Partiamo da Richter, p. 326 (come si deve):

"Il linguaggio CLR consente alle interfacce di contenere costruttori static.
CLR non consente alle interfacce di contenere alcun costruttore di istanza.
"

e da questo banale snippet "Foo.cs":

interface IFoo{void NonUnCostruttore();}

Lo compiliamo:

csc /t:library Foo.cs

per ottenere il codice IL:

ildasm Foo.dll /out=Foo.il

Il metodo NonUnCostruttore avrà questa dichiarazione in IL:

.method public hidebysig newslot abstract virtual instance void NonUnCostruttore() cil managed

Con l'aiuto del libro di Serge Lidin, scopriamo le modifiche che dobbiamo fare per "trasformare" il metodo NonUnCostruttore in un costruttore static:

"Class constructors are static, have specialname and rtspecialname flags, have neither parameters nor return value—that is, the return type is void—and have the name .cctor, which in ILAsm is a keyword rather than a name."

Modifichiamo di conseguenza la dichiarazione di sopra:

.method public hidebysig newslot abstract virtual static specialname rtspecialname void .cctor() cil managed

e ricompiliamo:

ilasm /DLL Foo.il

Nell'output dell'IL Assembler, queste due righe dovrebbero toglierci i dubbi:

Assembled method IFoo::.cctor
Operation completed successfully

Print | posted on sabato 11 settembre 2004 14:15 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET