C #: inizializza la variabile all'interno del metodo e usa l'intera classe [closed]

0

questa è una domanda concettuale, ma se inizializzo una variabile in c # come pubblica sarà in grado di essere usata nella classe come voglio una variabile " player1 " e una variabile " player2 " dove potrebbe essere uno dei due (o più)

  1. Player
  2. Computer

Ecco cosa vorrei sapere come farei:

public class Game  
{   
    //equivalent of initializing it here
    public bool islogging;  
    public string[] log;  
    public int draws, round;  

    public Game(player p1, computer p2)  
    {  
        public player player1 = p1;  
        public computer player2 = p2;                                                           
    }
    //other overloads here...
    ...
}

provandolo non funziona perché la parola chiave pubblica è rifiutata

public Game(player p1, player p2 )
{  
     public  player player1, player2;
     player player3 = p1;
     player player4 = p2;

 }      
    
posta user181782 26.08.2014 - 18:11
fonte

2 risposte

2

È una questione fondamentale dell'ambito.

Le variabili dichiarate all'interno di una funzione sono legate alla durata e all'accessibilità di tale funzione. *

C # non ti permette di dichiarare variabili che persistono come parte della classe all'interno di una funzione.

* L'espressione lambda a volte può invalidare quella dichiarazione, ma questo è ben al di fuori della portata di ciò che stai chiedendo.

Per ottenere ciò che stai chiedendo, usa questa sintassi.

public class Game  
{   
    //equivalent of initializing it here
    public bool islogging;  
    public string[] log;  
    public int draws, round;  
    public player player1;
    public computer player2

    public Game(player p1, computer p2)  
    {  
        player1 = p1;  
        player2 = p2;                                                           
    }
    //other overloads here...
    ...
}

oppure potresti anche provare quanto segue. Ma tieni presente che l'ambito di player1 e player2 terminerà con la funzione di costruzione.

public class Game  
{   
    //equivalent of initializing it here
    public bool islogging;  
    public string[] log;  
    public int draws, round;  
    public player player1;
    public computer player2

    public Game(player p1, computer p2)  
    {  
        player player1 = p1;  
        computer player2 = p2;                                                           
    }
    //other overloads here...
    ...
}
    
risposta data 26.08.2014 - 19:31
fonte
0

Per rispondere alla tua domanda sulla dichiarazione del loro tipo; i tipi delle variabili devono essere conosciuti in fase di compilazione, anche prima di sapere quale costruttore userà.

Quando dichiari queste variabili, per poter chiamare i metodi che desideri (Jump (), Move (), Die ()) su entrambi, devi dichiararli come il tipo di oggetto più specifico tu conosci di loro; ma non così specifico che ti limiterà a dichiararli come il tipo opposto. Ecco un esempio:

Shape shape1;
Shape shape2;

shape1 = new Rectangle(); // This works, because a Rectangle extends off of Shape.
shape2 = new Circle(); // This also works, because a Circle extends off of Shape.
shape1 = new Circle(); // Now shape1 has been changed to be a circle, too. The original
// Rectangle just basically disappeared.

Come per la definizione delle classi "Shape", "Rectangle" e "Circle", come la tua classe "Player"? Bene, se tutto questo ti sembra nuovo, devi assolutamente leggere il concetto di Polymorphism . Ti ho dato una sorta di panoramica astratta solo per darti un'idea di ciò che permette, ma principalmente è pensata per impedirti di copiare e incollare un sacco di codice, o di avere un grande "se-è-tipo" o " if-is-state "verifica dei tuoi oggetti.

    
risposta data 26.08.2014 - 22:09
fonte

Leggi altre domande sui tag