2009-07-24 11 views

risposta

18

Una variabile membro è un membro di un tipo e appartiene allo stato di quel tipo. Una variabile locale non è un membro di un tipo e rappresenta la memoria locale piuttosto che lo stato di un'istanza di un determinato tipo.

Questo è tutto molto astratto, tuttavia. Ecco un esempio C#:

class Program 
{ 
    static void Main() 
    { 
     // This is a local variable. Its lifespan 
     // is determined by lexical scope. 
     Foo foo; 
    } 
} 

class Foo 
{ 
    // This is a member variable - a new instance 
    // of this variable will be created for each 
    // new instance of Foo. The lifespan of this 
    // variable is equal to the lifespan of "this" 
    // instance of Foo. 
    int bar; 
} 
+2

dovresti menzionare qualcosa sullo stack anche –

+3

Lo stack è un dettaglio di implementazione. Sì, molte lingue memorizzano le variabili locali su uno stack di chiamate ma ciò non ha alcuna influenza su cosa sia una variabile locale _is_ per definizione. Ho incluso solo un esempio di codice per aiutare a fondere i concetti astratti di cui stavo parlando. –

+2

Mi piace chiamare i "campi" delle variabili membro solo per ridurre l'uso della parola "variabile". :) – mcjabberz

28

Una variabile locale è la variabile dichiarata in una funzione.

Una variabile membro è la variabile dichiarata in una definizione di classe.

+0

Questo è abbastanza facile - grazie – Chin

+0

_ welcome :) – ufukgun

+0

Quindi variabile membro == variabile di classe? – utdev

0

Una variabile membro appartiene a un oggetto ... qualcosa che ha uno stato. Una variabile locale appartiene solo alla tabella dei simboli di qualsiasi ambito tu sia. Tuttavia, saranno rappresentati in memoria più o meno come se il computer non avesse alcuna nozione di una classe ... vede solo bit che rappresentano istruzioni. Le variabili locali e le variabili membro possono essere nello stack o nell'heap.

1
public class Foo 
{ 
    private int _FooInt; // I am a member variable 


    public void Bar() 
    { 
     int barInt; // I am a local variable 
     //Bar() can see barInt and _FooInt 
    } 

    public void Baz() 
    { 
     //Baz() can only see _FooInt 
    } 
} 
5

Esistono due tipi di variabile membro: istanza e statica.

Una variabile di istanza dura fino a quando l'istanza della classe. Ce ne sarà una copia per istanza.

Una variabile statica dura quanto la classe. Ne esiste una copia per l'intera classe.

Una variabile locale viene dichiarata in un metodo e dura solo fino a quando il metodo ritorna:

public class Example { 
    private int _instanceVariable = 1; 
    private static int _staticvariable = 2; 

    public void Method() { 
     int localVariable = 3; 
    } 
} 

// Somewhere else 

Example e = new Example(); 
// e._instanceVariable will be 1 
// e._staticVariable will be 2 
// localVariable does not exist 

e.Method(); // While executing, localVariable exists 
      // Afterwards, it's gone 
2

Una variabile locale è la variabile si dichiara in una vita function.Its è solo su quella funzione.

Una variabile membro è la variabile dichiarata in una definizione di classe. La durata è solo all'interno di quella classe. È una variabile globale. Può essere accessibile da qualsiasi funzione all'interno della stessa classe.

-1
  • variabili dichiarate all'interno di un metodo sono "variabili locali"
  • variabili dichiarate all'interno della classe non all'interno di tutti i metodi sono "variabili membro" (variabili globali).
  • Le variabili dichiarate all'interno della classe non all'interno di alcun metodo e definite come statiche sono "variabili di classe".
Problemi correlati