Precisione, pignoleria o semplice delirio?

A mio avviso, il .NET framework ed il linguaggio C# sono caratterizzati da un design decisamente brillante, anche se ogni tanto qualche pecca  (o presunta tale) salta fuori. Ricordo ancora quando intervistammo Eric Gunneerson (allora PM di C#) chiedendo lumi sull'uso (ambiguo?) della keyword using sia come direttiva sia come statement ricavandone, a dire il vero, una risposta tutt'altro che soddisfacente. Ecco un paio di considerazioni sulle quali mi piacerebbe conoscere alcune opinioni.

Parlando del Dispose Pattern, mi chiedo spesso se abbia senso definirlo tale (pattern, appunto) o se non sarebbe più corretto riferirsi ad esso definendolo un idioma. Se è vero che: " Idioms are language-specific in that the problem they solve, or the context in which those problems are encountered, are caused by the language" allora credo che forse la riflessione sia fondata e non fuori luogo.

Vogliamo parlare di array? In C#, un array di interi (ma potremmo anche utilizzare un altro tipo) si può definire e costruire in questo modo:
int[] i = new int[101];
Quel int[] lascia chiaramente intendere che l'array si possa considerare un vero e proprio tipo, oltretutto derivato da System.Array, visto che è possibile chiedere:
Array a = i;
E che:
i.GetType().BaseType.Name
Restituisce "Array". Ciò che appare in qualche modo incoerente è vedere accanto al metodo costruttore new un tipo differente, ossia int[101] Probabilmente, una espressione formalmente più corretta sarebbe stata:
int[] i = new int[](101); 
Immaginando di utilizzare quindi un costruttore parametrico in overload.

Idee? Opinioni? Commenti? (Non sparate sul pianista...)

posted @ mercoledì 30 marzo 2005 23.33

Print

Comments on this entry:

# re: Precisione, pignoleria o semplice delirio?

Left by Andrea Raimondi at 31/03/2005 0.04
Gravatar
Espongo le mie idee.
Conosco un pò i design patterns e credo che il problema a cui ti riferisci non sia specifico di C# ma del CLR.

E', infatti, il CLR a determinare la "necessità" di un dispose pattern(a causa del GC). Quanto al definire un pattern, la definizione che mi piace di più è la seguente:" un pattern è una risposta ad un problema ricorrente indipendentemente dall'ambito in cui viene realizzata".

Direi che "ci sta".

Altra cosa sono gli array in C#. Sono fondamentalmente d'accordo con quello che dici, tranne forse che nella sintassi da usare. Io userei proprio molto semplicemente una cosa così:

int[] i = new Array(0,100);


Ciao,

Andrea

# re: Precisione, pignoleria o semplice delirio?

Left by Marco Russo at 01/04/2005 9.56
Gravatar
Andrea,
per quanto riguarda il Dispose, a posteriori una decisione sensata sarebbe stata eliminare l'interfaccia e obbligare a derivare da System.ComponentModel.Component (o da una classe equivalente definita in System, che implementi IDisposable ma non IComponent) ed evitare quelle ambiguità che portano ad avere un pattern implementativo differente tra i componenti di ASP.NET e il resto del Framework.
Rispetto alla sintassi... in realtà per me è intuitiva perché, arrivando da C++, la trovo naturale. Non è completamente logica, e sono d'accordo con te, ma ricordiamoci che C# nasce come "linguaggio con le graffe" e segue molte convenzioni non scritte definite da C, C++ e Java.

Your comment:



 (will not be displayed)


 
 
 
Please add 2 and 5 and type the answer here:
 

Live Comment Preview:

 
«febbraio»
domlunmarmergiovensab
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910