Quote:
Originally posted by "Mezzetti0903"
Negare l'istanziazione!! Preferibilmente in C#
Mi potete fare un esempio in qualsisasi linguaggio di come potrebbe essere possibile, se mai č possibile, negare l'instanziazione da costruttore?? ES(un po' cialtrone perchč lo faccio sul momento):
public class Servizi
public Servizi(string username,string password) {
if ((username=="CIAO") && (password=="CIAO")) {
// OK TUTTO A POSTO
}
else { // ANNULLA L'ISTANZA }
}
}
Ora.. potrei che ne so mettere una variabile "isaccessible" = false
che viene controllata da TUTTI i metodi e propietą prima che si eseguino ma..NON MI SEMBRA ELEGANTE
non mi sembra nč
|
Una soluzione potrebbe essere quella di gettare un'eccezione nel costruttore:
Codice:
public class Servizi
public Servizi(string username,string password) {
if ((username=="CIAO") && (password=="CIAO")) {
// OK TUTTO A POSTO
}
else {
throw Error("blablalba");
}
}
nel codice poi faresti cosi'
Codice:
...
try {
x = new Servizi("pinco","pallino");
} catch( Error e )
{
...
}
ovviamente al netto degli errori

. Conosco poco il C# e quindi non so se supporta le eccezioni nel costruttore, devi comunque stare attento che non e' mai una bella cosa cominciare un lavoro (costruire un oggetto) e poi lasciarlo a meta' (lanciando l'eccezione). Prima di lanciare l'eccezione provvedi a "ripulire" quanto fatto, ad esempio liberando risorse se queste non verranno sistemate automaticamente dal garbage-collector.
Una alternativa e' fare una classe apposita che costruisca (o meno) l'oggetto di cui hai bisogno:
Codice:
public class ServiceFactory
{
public Servizi getService( string username, string password )
{
...
}
}
che ritorna un oggetto se i parametri sono corretti, un null altrimenti. La cosa si puo' anche estendere: in questo caso infatti il vero oggetto ritornato non e' noto, potrebbe essere una sottoclasse di Servizi, e si potrebbe ritornare un oggetto con diritti particolari in base all'utente.