View Single Post
Old 06-02-2003, 10:30   #2
/\/\@®¢Ų
Bannato
 
L'Avatar di /\/\@®¢Ų
 
Iscritto dal: Jul 2000
Cittą: Malo (VI)
Messaggi: 1000
Re: Negare l'istanziazione!!

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.
/\/\@®¢Ų č offline   Rispondi citando il messaggio o parte di esso