Oppure

Loading
29/11/12 11:40
mg

Vorrei definire una stessa variabile (ad esempio "serie";) nei "case" di "switch" di tipo diverso a seconda del case.

cioè:
nel case 0 dovrei avere AreaSeries serie = new AreaSeries();
nel case 1 dovrei avere ColumnSeries serie = new columnSeries();

questo perchè poi la variabile "serie" è trattata nello stesso modo indipendentemente dal tipo.

E' possibile fare questo?

grazie
aaa
29/11/12 11:51
Bonny
Certo che è possibile.
Le istruzioni che scrivi nei vari "casi" allo switch non importano, basta che siano istruzioni valide per il linguaggio.
Ultima modifica effettuata da Bonny 29/11/12 11:52
aaa
29/11/12 13:56
mg
Ricevo l'errore che la variabile "serie" è definita due volte.

O meglio, nel secondo case, definendo la variabile nuovamente mi dice che è già definita nell'ambito.

grazie
aaa
29/11/12 14:09
Bonny
Boh .... cioè definendo e istanziando l'oggetto all'interno del blocco del case, per esempio:
switch(var){

  case 0: 
      //inizio blocco
      AreaSeries serie = new AreaSeries(); 
      //fine blocco
     break;

  case 1: 
      ColumnSeries serie = new columnSeries(); 
     break;
}

l' ambiente dell'oggetto è il blocco e dovrebbe andare bene non trovo niente di strano
Ascolta non potresti fare una cosa di questo genere:
crei una super classe (anche astratta) Series
poi estendi Series in AreaSeries e columnSeries, cosi nello switch :
Series serie;

switch(var){

  case 0: 
      //inizio blocco
      serie = new AreaSeries(); 
      //fine blocco
     break;

  case 1: 
     serie = new columnSeries(); 
     break;
}

Cosi in questo modo dopo l'esecuzione dello switch serie sarà un oggetto di tipo AreaSeries o columnSeries.
Beh comunque prova a postare il codice che hai scritto..
Ultima modifica effettuata da Bonny 29/11/12 14:11
aaa
29/11/12 14:16
mg
Prima di tutto grazie dell'aiuto.

Ti allego lo screenshot dell'errore.

MArco
aaa
29/11/12 14:21
Bonny
Perdonami ma davo per scontato che lo switch avesse questa caratteristica.... non lo uso quasi mai solo e sempre il mio if e else if forever!!!!
comunque ho fatto dei test e quello che vuoi fare tu non puoi es:
Questo non funizona il compilatore da errore

      switch (var) {
         case 0:
            float u;
            break;
         case 1:
            int u;
            break;
      }


questo invece funziona
      if (var == 0) {
         float u;
      } else if (var == 1) {
         int u;
      }


Quindi o usi gli if o fai la super classe come ho citato prima nel topic precedente..
A meno che altre persone non propongano altra soluzione..
aaa
29/11/12 14:26
Bonny
Attento però: se lo fai con gli if "il tempo di vita dell'oggetto serie" sarà esclusivamente quello all'interno del corpo if invece, con la super classe (con lo stesso meccanismo di definire il riferimento all'oggetto 'Series serie' prima degli if) potrai usare l'oggetto anche dopo gli if... non so se mi sono spiegato...
aaa
29/11/12 14:27
mg
Cancello quanto scritto! Mi hai anticipato.

E sia super classe! :k:

grazie mille
Marco
Ultima modifica effettuata da mg 29/11/12 14:33
aaa