2013-03-05 25 views
7
public static void DoSomething() 
{ 
int a; 
string b; 

//..do something 
} 

Trong ví dụ trên, tôi đã khai báo hai biến. Chúng có trở thành tĩnh vì phương pháp chứa chúng là tĩnh không?Các biến trong phương thức tĩnh có trở nên tĩnh tự động vì chúng nằm trong phạm vi tĩnh trong C# không?

+0

Không, bạn có cách nào khai báo biến cục bộ tĩnh trong C# không? –

+0

có thể trùng lặp của [Biến chia sẻ bên trong phương thức tĩnh] (http://stackoverflow.com/questions/3399922/variable-sharing-inside-static-method) – nawfal

Trả lời

4

Mặc dù có sẵn trong C, biến cục bộ tĩnh không được hỗ trợ trong C#.

Nếu bạn muốn một biến tĩnh cục bộ tương đương, bạn có thể tạo biến mẫu trên lớp hoặc biến tĩnh. Nếu không, hãy xem xét nếu chính phương thức đó thuộc về lớp tĩnh và liệu nó có phải là một phần của một kiểu khác hay không.

0

Bạn không thể có biến tĩnh cục bộ.

C# không hỗ trợ biến cục bộ tĩnh (biến được khai báo trong phạm vi phương thức).

6

Không. Chỉ có phương pháp là tĩnh chứ không phải biến.

Từ MSDN:

C# không hỗ trợ các biến cục bộ tĩnh (các biến được khai báo trong phạm vi phương pháp).

nếu bạn muốn có biến tĩnh trong thành viên tĩnh, làm tờ khai bên ngoài các phương pháp tĩnh,

private static int _var = 0; 
public static void SampleMethod() 
{ 
    _var++; 
} 
1

Từ MSDN

C# không hỗ trợ các biến cục bộ tĩnh (các biến có khai báo trong phạm vi phương pháp).

1

Tôi tích cực với ý kiến ​​của bạn nhưng trong mã mẫu bên dưới tôi đang ngoại lệ vi phạm quyền truy cập về việc sử dụng bộ nhớ được bảo vệ. Do đó có lẽ nó không hỗ trợ các biến cục bộ tĩnh nhưng trong quản lý bộ nhớ nó có thể trỏ cùng một địa chỉ.

public static byte[] RawSerialize(object anything) 
     { 

       int rawsize = Marshal.SizeOf(anything); 
       IntPtr buffer = Marshal.AllocHGlobal(rawsize); 
       Marshal.StructureToPtr(anything, buffer, false); 
       byte[] rawdata = new byte[rawsize]; 
       Marshal.Copy(buffer, rawdata, 0, rawsize); 
       Marshal.FreeHGlobal(buffer); 
       return rawdata ; 
     } 
0

Không, chỉ có phương pháp là tĩnh.

Từ MSDN:

C# không hỗ trợ các biến cục bộ tĩnh (các biến có khai báo trong phạm vi phương pháp).

here:

Các modifier tĩnh có thể được sử dụng với các lớp học, các lĩnh vực, phương pháp, tài sản, nhà khai thác, các sự kiện, và nhà thầu, nhưng nó không thể được sử dụng với indexers, hủy, hoặc loại khác ngoài lớp học.

Như bạn có thể thấy, các biến cục bộ không được đề cập.

Bạn có thể, tuy nhiên sử dụng một trường tĩnh:

public class MyClass 
{ 
    private static int MyVariable = 10; 

    public static void MyMethod() 
    { 
     MyVariable++; 
    } 
} 

Một lớp học có thể tĩnh, và nó có thể có các thành viên tĩnh, cả hai chức năng và các lĩnh vực nhưng không phải là các biến trong phạm vi tĩnh.

Các vấn đề liên quan