DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

C# 3.0: La 'magia (alcune volte) inutile' degli Anonymous Types

Oggi pomeriggio stavo studiando il comportamento degli Anonymous Types nella speranza di trovare un motivo (anche vagamente) valido per cui utilizzarli ,chiaramente al di fuori di LINQ ;), e volendo analizzare cosa il compiler generasse dietro le quinte in alcuni casi particolari ho provato a eseguire codice come questo...

var
var1 = new { UserName = "N1", LastUpdate = DateTime.Now };
var var2 = new { UserName = "N2", LastUpdate = DateTime.Now.ToShortDateString() };           
Console.WriteLine(var1.GetType().ToString());
Console.WriteLine(var2.GetType().ToString());


...aspettandomi che il compiler autogenerasse dei tipi dummy diversi tra loro: "in fondo " - pensavo - " la reflection della proprietà LastUpdate dovrebbe portare il compiler a generare due Anonymous Types diversi eh eh eh...".  Il risultato che ottengo invece è questo:

<>f__AnonymousType0`2[System.String,System.DateTime]
<>f__AnonymousType0`2[System.String,System.String]

 mmmm... stesso Anonymous Type?!  Non solo, l'intellisense mi fa vedere per ciascun oggetto (var1 e var2) il corretto tipo associato alla versione della proprietà LastUpdate utilizzata (rispettivamente DateTime e string). Perfetto... mi sta bene...sconfitta bruciante.... ma come è possibile? La risposta è in realtà molto semplice.
Andiamo a disturbare ILDASM:

 

Si nota immediatamente che le due proprietà UserName e LastUpdate sono definite come Generic (e readonly per essere precisi), quindi riutilizzabili all'interno della stessa classe 'anonima'.... geniale!!!

Ad ogni modo, devo dire che l'utilizzo degli Anonymous Types (da non confondere con il dynamic typing di altri linguaggi come Python e Ruby) non mi entusiasma molto, in quanto non mi piace l'idea che il compilatore scelga e generi nuovi tipi per colmare la pigrizia dello sviluppatore, che secondo me farebbe bene a guardarsi dagli effetti implementativi (spesso deleteri a mio modo di vedere) a cui gli Anonymous Types potrebbero dar vita soprattutto se non si possiede la conoscenza piena di come il compilatore si comporta per supportare questa affascinante quanto inutile feature.

 Technorati tags: *C#, *AnonymousTypes

Print | posted on venerdì 19 ottobre 2007 22:52 |

Feedback

Gravatar

# re: C# 3.0: La 'magia inutile' degli Anonymous Types

Secondo me
1) keyword var
2) anonymous types
3) extension methods

sono tutti e tre espedienti MOLTO comodi, ma rischiano di minare parecchio la leggibilità del codice.

Ah, IMHO sono lì soprattutto per supporto a LINQ ;-)

20/10/2007 00:43 | Marco De Sanctis
Gravatar

# Re: C# 3.0: La 'magia inutile' degli Anonymous Types

Non sono inutili. Servono per LINQ.
Non si sarebbe potuto relaizzare la sintassi SQL-like di LINQ senza anonymous types.
20/10/2007 02:31 | Michele Bersani
Gravatar

# re: C# 3.0: La 'magia inutile' degli Anonymous Types

Certo che sono serviti alla realizzazione di LINQ, ma in questo post volevo evidenziare piuttosto il loro particolare utilizzo proprio al di fuori di LINQ ;), che rischia di creare confusione (es. leggibilità) soprattutto per gli sviluppatori meno esperti.
20/10/2007 04:31 | Dario Santarelli
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET