2009-07-24 38 views

Trả lời

18

Biến thành viên là thành viên của một loại và thuộc về trạng thái của loại đó. Biến cục bộ không phải là thành viên của một loại và biểu thị lưu trữ cục bộ thay vì trạng thái của một thể hiện của một loại đã cho.

Điều này tất cả đều rất trừu tượng. Dưới đây là ví dụ 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

bạn nên đề cập đến một cái gì đó về ngăn xếp cũng –

+3

Ngăn xếp là một chi tiết thực hiện. Có, nhiều ngôn ngữ lưu trữ các biến cục bộ trên một ngăn xếp cuộc gọi nhưng không có bất kỳ biến nào về biến cục bộ _is_ theo định nghĩa. Tôi chỉ đưa vào một ví dụ về mã để giúp các khái niệm trừu tượng mà tôi đang nói đến. –

+2

Tôi thích gọi biến thành viên là "trường" chỉ để giảm thiểu việc sử dụng từ "biến". :) – mcjabberz

28

Biến cục bộ là biến mà bạn khai báo trong hàm.

Biến thành viên là biến mà bạn khai báo trong lớp xác định.

+0

Thật dễ dàng - cảm ơn – Chin

+0

_ welcome :) – ufukgun

+0

Vì vậy biến thành viên == biến lớp? – utdev

0

Biến thành viên thuộc về một đối tượng ... một thứ có trạng thái. Một biến cục bộ chỉ thuộc về bảng ký hiệu của bất kỳ phạm vi nào bạn đang ở. Tuy nhiên, chúng sẽ được biểu diễn trong bộ nhớ giống như máy tính không có khái niệm về một lớp ... nó chỉ thấy các bit đại diện cho các lệnh. Các biến cục bộ và các biến thành viên có thể nằm trên stack hoặc đống.

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

Có hai loại biến thành viên: instance và static.

Biến thể hiện kéo dài miễn là phiên bản của lớp. Sẽ có một bản sao của nó cho mỗi trường hợp.

Biến tĩnh kéo dài miễn là lớp học. Có một bản sao của nó cho cả lớp.

Một biến cục bộ được khai báo trong một phương pháp và chỉ kéo dài cho đến khi phương thức trả về:

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

Một biến cục bộ là biến bạn khai báo trong một tuổi thọ function.Its là chỉ chức năng đó.

Biến thành viên là biến mà bạn khai báo trong định nghĩa lớp. Tuổi thọ của nó chỉ nằm trong lớp đó.Đó là biến toàn cầu. Nó có thể được truy cập bởi bất kỳ hàm nào bên trong cùng một lớp đó.

-1
  • Biến khai báo trong một phương pháp là "biến địa phương"
  • Biến khai báo trong lớp không nằm trong bất kỳ phương pháp "biến thành viên" (biến toàn cục).
  • Các biến được khai báo trong lớp không nằm trong bất kỳ phương thức nào và được định nghĩa là tĩnh là "biến lớp".
Các vấn đề liên quan