Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Definire tipi diversi della stessa variabile in switch
Forum - C# / VB.NET - Definire tipi diversi della stessa variabile in switch

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 12:40
Giovedì, 29/11/2012

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

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 12:51
Giovedì, 29/11/2012
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 il 29/11/2012 alle 12:52
PM Quote
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 14:56
Giovedì, 29/11/2012
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

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:09
Giovedì, 29/11/2012
Boh .... cioè definendo e istanziando l'oggetto all'interno del blocco del case, per esempio:
Codice sorgente - presumibilmente C++

  1. switch(var){
  2.  
  3.   case 0:
  4.       //inizio blocco
  5.       AreaSeries serie = new AreaSeries();
  6.       //fine blocco
  7.      break;
  8.  
  9.   case 1:
  10.       ColumnSeries serie = new columnSeries();
  11.      break;
  12. }


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 :
Codice sorgente - presumibilmente C++

  1. Series serie;
  2.  
  3. switch(var){
  4.  
  5.   case 0:
  6.       //inizio blocco
  7.       serie = new AreaSeries();
  8.       //fine blocco
  9.      break;
  10.  
  11.   case 1:
  12.      serie = new columnSeries();
  13.      break;
  14. }


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 il 29/11/2012 alle 15:11
PM Quote
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 15:16
Giovedì, 29/11/2012
Prima di tutto grazie dell'aiuto.

Ti allego lo screenshot dell'errore.

MArco


mg ha allegato un file: Senza nome.jpg (41313 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:21
Giovedì, 29/11/2012
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
Codice sorgente - presumibilmente C++

  1. switch (var) {
  2.          case 0:
  3.             float u;
  4.             break;
  5.          case 1:
  6.             int u;
  7.             break;
  8.       }



questo invece funziona
Codice sorgente - presumibilmente C++

  1. if (var == 0) {
  2.          float u;
  3.       } else if (var == 1) {
  4.          int u;
  5.       }



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..

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:26
Giovedì, 29/11/2012
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...

PM Quote
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 15:27
Giovedì, 29/11/2012
Cancello quanto scritto! Mi hai anticipato.

E sia super classe! :k:

grazie mille
Marco

Ultima modifica effettuata da mg il 29/11/2012 alle 15:33
PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:35
Giovedì, 29/11/2012
Se ti fidi di me:
Codice sorgente - presumibilmente Php

  1. class Series{
  2.    //variabili metodi ecc..
  3. }
  4.  
  5. class AreaSeries extends Series{
  6.    //eredita var e metodi da series
  7.  
  8.   //aggiungo qualcosa (var o met) che la differenzi da ColumSeries altrimenti non avrebbe senso far questo
  9. }
  10.  
  11. class ColumnSeries extends Series{
  12.    //eredita var e metodi da series
  13.  
  14.   //aggiungo qualcosa (var o met) che la differenzi da AreaSeries altrimenti non avrebbe senso far questo
  15. }
  16.  
  17. //nel sorgente in qui userai questi oggetti
  18.  
  19. Series serie = null;
  20.  
  21. switch(var){
  22.  
  23.   case 0:
  24.       serie = new AreaSeries();
  25.      break;
  26.  
  27.   case 1:
  28.      serie = new columnSeries();
  29.      break;
  30.  
  31.   case 2: //farà qualcosa
  32.     break;
  33. }
  34.  
  35. if(serie == null){
  36.    //non è stato istanziato l'oggetto
  37. }else{
  38.   //è stato istanziato
  39.   //istruzioni succ
  40. }


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo