887 messaggi dal 21 marzo 2008
Ciao a tutti
Spero di essere chiaro.
Ho queste classi:
public class A{...}
public class B{...}
public class C{...}

Vorrei fare una cosa del genere:

dynamic oggetto = null;
switch(tipo)
{
case "A":
//oggetto deve essere di tipo classe A
break;

...
}

Non voglio creare una nuova istanza perchè devo poter accedere a dei metodi statici.
Come posso fare questo?
Grazie mille
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
con un'istruzione switch non si può fare (ancora), quindi dovresti ricorrere a degli if.
//Io qui istanzio un A, ma l'istanza potrebbe essere
// stata fornita da altri componenti del tuo software
object oggetto = new A();
Type tipo = oggetto.GetType();
if (tipo == typeof(A)){
  //Fai qualcosa
} else if (tipo == typeOf(B)){
  //Fai qualcos'altro
} else {
  //Fai altro
}


Nella prossima versione di C# (la 7) era stato pianificato il supporto al pattern matching avanzato che ti avrebbe consentito di fare questa cosa con uno switch, ma apparentemente non si è rivelata una funzionalità ancora affidabile.
https://www.infoq.com/news/2016/05/csharp7-pattern-matching-removed


Non voglio creare una nuova istanza perchè devo poter accedere a dei metodi statici.

Non ho capito, puoi spiegare meglio? Vuoi invocare un metodo statico dalla stessa classe di oggetto?

ciao,
Moreno

Enjoy learning and just keep making
887 messaggi dal 21 marzo 2008
Ciao Moreno
Io voglio trovare un modo per assegnare ad 'oggetto' il tipo a 'A' per esempio.
Questo perchè devo richiamare dei metodi statici.
Tutte le classi 'A', 'B', 'C' ecc derivano da una classe base. Tutte le classi hanno le stesse funzioni statiche, ma che vanno a recuperare o salvare dati diversi.
Quello che voglio fare è creare un metodo che mi permetta con poche righe di codice di aggiungere in futuro una nuova classe.

Potrei anche fare così:
switch (operazione)
{
case 'delA':
A.Delete();
break;

case 'insA':
A.Ins();
break;

case 'delB':
B.Delete();
break;

case 'indB':
A.Ins();
break;

...

}

In questo modo se in futuro ho bisogno di un'altra classe derivata sarò costretto ad aggiungere per esempio: case 'insZ' ecc

Mentre io vorrei fare così:
switch(tipo)
{
case 'A':
oggetto = A;
break;

case B:
oggetto = B;
break;

...
}

oggetto.Delete();
oggetto.Ins();

In questo modo se il futuro voglio aggiungere una nuova classe derivata o una nuova funzione devo solo scrivere poche righe di codice

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.