2009-07-24 13 views

Odpowiedz

18

Zmienna członkowska jest elementem typu i należy do tego typu. Zmienna lokalna nie jest elementem typu i reprezentuje magazyn lokalny, a nie stan instancji danego typu.

Wszystko to jednak jest bardzo abstrakcyjne. Oto przykład 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

powinieneś wspomnieć coś o stosie także –

+3

Stos jest szczegółem implementacji. Tak, wiele języków przechowuje zmienne lokalne na stosie wywołań, ale to nie ma wpływu na to, co z definicji jest zmienną lokalną. Dodałem tylko przykład kodu, aby pomóc w uziemieniu abstrakcyjnych koncepcji, o których mówiłem. –

+2

Lubię wywoływać zmienne członkowskie "pola" tylko po to, aby ograniczyć użycie słowa "zmienna". :) – mcjabberz

28

Zmienna lokalna to zmienna, którą deklarujesz w funkcji.

Zmienna składowa jest zmienną zadeklarowaną w definicji klasy.

+0

To dość proste - dzięki – Chin

+0

_ welcome :) – ufukgun

+0

Więc zmienna członka == zmienna klasy? – utdev

0

Zmienna członkowska należy do obiektu ... coś, co ma stan. Zmienna lokalna po prostu należy do tablicy symboli o jakimkolwiek zakresie, w jakim się znajdujesz. Będą one jednak reprezentowane w pamięci tak samo, jak komputer nie ma pojęcia klasy ... po prostu widzi bity, które reprezentują instrukcje. Zmienne lokalne i zmienne składowe mogą znajdować się na stosie lub stercie.

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

Istnieją dwa rodzaje zmiennych składowych: instancja i statyczna.

Zmienna instancji trwa tak długo, jak instancja klasy. Będzie jeden egzemplarz na jedną instancję.

Zmienna statyczna trwa tak długo, jak klasa. Jest jedna kopia tego dla całej klasy.

Zmienna lokalna jest zadeklarowana w metodzie a jedynie trwa aż metoda zwraca:

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

zmiennej lokalnej jest zmienną zadeklarować w function.Its długości życia jest tylko na tej funkcji.

Zmienna składowa jest zmienną zadeklarowaną w definicji klasy. Jej długość życia mieści się tylko w tej klasie. Jest to globalna zmienna. Może być dostępna przez dowolną funkcję wewnątrz tej samej klasy.

-1
  • Zmienne zadeklarowane w metodzie są „zmienne lokalne”
  • zmienne zadeklarowane w klasie nie mieści wszelkie metody są „zmienne składowe” (zmienne globalne).
  • Zmiennymi zadeklarowanymi w klasie, nie w ramach żadnej metody i zdefiniowanymi jako statyczne, są "zmienne klasy".
Powiązane problemy