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

//..do something 
} 

W powyższym przykładzie, mam zadeklarowane dwie zmienne. Czy stają się statyczne, ponieważ metoda, która je zawiera, jest statyczna?Czy zmienne w statycznych metodach stają się statyczne automatycznie, ponieważ znajdują się w statycznych zakresach w języku C#?

+0

Nie, czy istnieje sposób deklarowania statycznej zmiennej lokalnej w języku C#? –

+0

możliwy duplikat [Variable sharing in static method] (http://stackoverflow.com/questions/3399922/variable-sharing-inside-static-method) – nawfal

Odpowiedz

4

Chociaż dostępne w języku C, statyczne zmienne lokalne nie są obsługiwane w języku C#.

Jeśli chcesz uzyskać lokalny odpowiednik zmiennej statycznej, możesz utworzyć zmienną instancji na klasie lub zmienną statyczną. W przeciwnym razie rozważ, czy sama metoda należy do klasy statycznej i czy powinna być częścią innego typu.

0

Nie można mieć lokalne zmienne statyczne.

C# nie obsługuje statycznych zmiennych lokalnych (zmiennych zadeklarowanych w zakresie metody).

6

Nie. Tylko metoda jest statyczna, ale nie zmienna.

Od MSDN:

C# nie obsługuje statyczne zmienne lokalne (zmienne, które są zadeklarowane w zakresie metody).

jeśli chcesz mieć zmienną statyczną w członka statycznego, czy oświadczenie poza metoda statyczna,

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

Od MSDN

C# nie obsługuje statyczne zmienne lokalne (zmienne, które są zadeklarowane w zakresie metody).

1

Jestem pozytywny z twojej opinii, ale w poniższym przykładowym kodzie podejmuję wyjątek naruszenia dostępu dotyczący korzystania z pamięci chronionej. Z tego powodu może nie obsługuje statycznych zmiennych lokalnych, ale w zarządzaniu pamięcią może wskazywać ten sam adres.

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

Nie, tylko metoda jest statyczna.

Od MSDN:

C# nie obsługuje statyczne zmienne lokalne (zmienne, które są zadeklarowane w zakresie metody).

I here:

Statyczny modyfikator może być używany z klas, pól, metod, właściwości, operatorów, wydarzeń i konstruktorów, ale to nie może być stosowany z indeksujący, destruktory, lub typy inne niż klasy.

Jak widać, zmienne lokalne nie są wymienione.

Można jednak użyć statycznego pola:

public class MyClass 
{ 
    private static int MyVariable = 10; 

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

Klasa może być statyczna, a to może mieć elementy statyczne, obie funkcje i pola, ale nie zmienne w zakresie statycznego.

Powiązane problemy