Come faccio a chiamare una variabile da un’altra classe in C#

Vengo da Java e sto prendendo il C# script, ho avuto questo problema per circa due giorni e giorni alla ricerca di soluzioni, ho provato l’impostazione della classe di un’istanza e tutto il resto. Questo è un gioco in miniatura progetto che sto lavorando con alcuni amici.

In ogni modo, ho StatHandler.cs che gestisce tutti i nostri statpoints… poi ho HealthManager.cs che si suppone per gestire tutti Correlati con la Salute di roba.

Il problema è che non posso per la vita di me a capire come chiamare le variabili come

public int stamina, strength, agility, dexterity, wisdom;

da StatHandler.cs

So che in Java sarebbe facile come

maxHealth = StatHandler.stamina * 10;

Anche se, non si può fare che con C#, quando si crea un’istanza del codice simile a questo

maxHealth = StatHandler.instance.stamina * 10;

che mi fornisce l’errore

NullReferenceException: Object reference not set to an instance of an object

Ho anche provato inherriting, facendo questo

public class HealthHandler : StatHandler {

ma imposta tutti i valori a 0 in HealthHandler classe, non leggere nulla.


Ho davvero solo bisogno di capire come tirare la variabile dall’altra i file C#, perché questo è il rallentamento di me fino in fondo.

  • qui è come fare un lungo viaggio e qui è come farlo per ora 😉
  • sembra come se si sta cercando di accedere a stamina come se fosse un campo statico.. o renderlo statico in StatHandler o creare una nuova istanza di StatHandler e ottenere la resistenza da esso.
  • …”raccogliendo C# script”…”chiamata variabili”…”tirare le variabili da C# file”… questa terminologia è molto esotico. Oltre a questo, è lo stesso come in Java: avete bisogno di un oggetto istanza di accesso a campi non statici di una classe.
  • StatHandler.istanza non è la creazione di un’istanza. Siete sicuri da Java? Forse da JavaScript?



4 Replies
  1. 3

    Realtà stessa come in Java. Per non variabili statiche avete bisogno di una istanza di classe:

    StatHandler sh = new StatHandler();
    maxHealth = sh.stamina * 10;

    o è possibile dichiarare variabili statiche, in classe, come

    public static string stamina = 10;

    e quindi accedere

    maxHealth = StatHandler.stamina * 10;
  2. 0

    In C#, non è possibile utilizzare un tipo di valore variabile senza inizializzarlo.

    Sembra StatHandler.instance è static metodo. Non è possibile utilizzare il int variabili, senza alcun ricevuto. Assegnare valori a loro.

    Per esempio

    public int stamina = 1, strength = 2, agility = 3, dexterity = 4, wisdom = 5;
    • Sono assegnati tardi nel mio codice, utilizzando la Libreria eseguo tutti i miei variabili script funzione Start (), alla quale ho applicato il valore del 10 per tutte le variabili.
  3. 0

    NullReferenceException: riferimento a un Oggetto non impostato su un’istanza di un oggetto

    È necessario inizializzare correttamente. Sembra StatHandler.instance è statico e non inizializzato.

    È possibile inizializzare nel static costruttore

    class StatHandler
    {
    
      static StatHandler()
      {
          instance = new Instance(); //Replace Instance with type of instance
      }
    }
    • ma, considerando che questo sta andando essere il multiplayer quando abbiamo finito con esso, non usando le variabili statiche su una sceneggiatura annessa al giocatore fallire e causare ogni giocatore ha le stesse statistiche?
    • Sarebbe, dovrebbe essere un membro di istanza. Ma che è un problema di progettazione, si verificheranno molti problemi. È possibile scrivere tutti i requisiti, creare un modello di oggetto, e poi se hai un ulteriore problema, si dovrebbe chiedere al programmers.stackexchange.com
  4. 0

    Ci sono due modi per andare qui.

    Pieno Statico Classe

    public static class StatHandler
    {
        public static Int32 Stamina = 10;
        public static Int32 Strength = 5;
    }

    E poi:

    maxHealth = StatHandler.Stamina * 10; //get the value and use it
    StatHandler.Stamina = 19; //change the value

    Istanza Del Singleton

    public class StatHandler
    {
        public static StatHandler Instance;
    
        public Int32 Stamina = 10;
        public Int32 Strength = 5;
    
        //this is called only the first time you invoke the class
        static StatHandler()
        {
            m_Instance = new Instance(); //Replace Instance with type of instance
        }
    }

    E poi:

    maxHealth = StatHandler.Instance.Stamina * 10; //get the value and use it
    StatHandler.Instance.Stamina = 19; //change the value
    
    //replace the current instance:
    StatHandler.Instance = new StatHandler();
    StatHandler.Instance.Stamina = 19; //change the value

    Penso che la prima è sempre la scelta migliore, lo stesso risultato, meno complessità.

Lascia un commento