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

//..do something 
} 

、私は2つの変数を宣言しました。 それらを含むメソッドが静的なので、静的になりますか?静的メソッド内の変数は、C#の静的スコープ内にあるため自動的に静的になりますか?上記の例では

+0

いいえ、C#で静的ローカル変数を宣言する方法はありますか? –

+0

[静的メソッド内の変数共有]の複製が可能です(http://stackoverflow.com/questions/3399922/variable-sharing-inside-static-method) – nawfal

答えて

4

もののは、静的ローカル変数は、C#でサポートされていません。

ローカル静的変数に相当したい場合は、クラスのインスタンス変数、または静的変数を作成することができます。それ以外の場合は、メソッド自体が静的クラスに属していて、別の型の一部であるかどうかを検討してください。

0

ローカル静的変数は使用できません。

C#では、静的ローカル変数(メソッドスコープで宣言されている変数)はサポートされていません。

6

号は、唯一の方法は、静的ではなく、変数です。 MSDNから

C#は、静的なローカル変数(メソッドのスコープ内で宣言された変数)をサポートしていません。 Cで利用可能な

あなたは静的メンバで静的変数を持つようにしたい場合は、静的メソッドの外に宣言を行い、

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

MSDNからC#​​は、静的なローカル変数(メソッドのスコープ内で宣言 である変数)をサポートしていません。

1

あなたの意見では肯定的ですが、私は以下のサンプルコードで保護されたメモリの使用に関するアクセス違反の例外をとっています。そのため、静的なローカル変数をサポートしていない可能性がありますが、メモリ管理では同じアドレスを指すことができます。

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

いいえ、メソッドは静的です。

MSDNから:

C#は、静的なローカル変数(メソッドのスコープ内で宣言 である変数)をサポートしていません。

そしてhere

static修飾子は、クラス、フィールド、メソッド、 プロパティ、演算子、イベント、およびコンストラクタで使用することができますが、それはインデクサと を使用することはできません、デストラクタ、またはクラス以外の型。

あなたが見ることができるように、ローカル変数は言及されていません。

ただし、静的フィールドを使用することができます

public class MyClass 
{ 
    private static int MyVariable = 10; 

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

をクラスには、静的することができ、そしてそれは静的スコープで静的メンバ、関数やフィールドではなく、変数の両方を持つことができます。

関連する問題