giovedì 10 novembre 2011

Customs Class Property ( No Emit ).

Mi sono imbattuto in questa "cosa", e sulle prime ho pensato "GENIALE". Ma la gioia si è spenta in meno di un minuto. Mi sono reso conto di quanto questa "cosa" sia pericolosa.

L'idea iniziale era di creare un oggetto a run Time, e quindi partendo della classe Emit e IlGenerator, mi sono poi domandato per quale motivo creare un intera classe quando la necessità era di creare solo propietà ?

Da qui quintali di possibili ragionamenti su come agire, senza trovare troppo conforto su web.

La conclusione è stata questa:

public class ghost         
{
public Dictionary<string, object> Properties = new Dictionary<string, object>();

public object this[string name]
{
get
{
if (Properties.ContainsKey(name))
{
return Properties[name];
}
return null;
}
set
{
Properties[name] = value;
}
}

public ghost(string[] properties)
{
for ( int i = 0; i <properties.Length; i++)
{
Properties.Add(properties[i],null);
}
}
}


Fantastico, bellissimo... MA ANCHE NO... l'ho rinominato come ABOMINIO !

Già perchè in mano a programmatori "folli" ( sai che sto parlando di TE M.C.) questa classe è un danno di prima categoria.


Già perchè non solo non generica, usa dictionary che ammazza ram e performance, ma è pure "comoda" perchè ti permette di accedere alle proprietà indicandole per nome...

ghost g=    new ghost(   new string[] {"ID","Name","Description"});
ghost g1 = new ghost( new string[] { "ID", "Name", "Description","Cammello" });
ghost g2 = new ghost( new string[] { "Arosio", "Justina", "cheNeso" });



List<ghost> gx = new List<ghost>();

gx.Add(g);
gx.Add(g1);
gx.Add(g2);


string curProperty ="ID";
object curValue = new DataColumn("case");

g1["ID"] = g1["Name"];

g1[curProperty] = curValue;


Arrivando a poter fare cose di questo tipo ...

Ammetto da piccole classi dipendo grandi problematiche...

Nessun commento: