2016-05-07 4 views
0

次のコード無効な表現用語「国民

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     public int x = 5; 
     MessageBox.Show(x.ToString()); 
    } 
} 

のためには、私は次のようなエラーにラインpublic int x = 5;

無効な表現用語

「国民

を持っています

イベントハンドラ内でパブリックオブジェクトを定義できないのはなぜですか?

+2

メソッド内で 'public'キーワードはどのように使用されますか? – shahkalpesh

+0

なぜ 'public int x = 5;'? –

+0

私はちょうどイベントハンドラの中でpublicオブジェクトを宣言してテストします – sarahHH

答えて

2

publicは、タイプ(たとえばpublic class Foo)とタイプメンバー(クラスのメソッド、プロパティ、フィールドなど)のアクセス修飾子です(button3_Clickなど)。

メソッド内のローカル変数をpublicとして宣言しようとしていますが、これは許可されていません。

コンパイルエラーを修正する1つの方法は、public int x = 5;ではなく、button3_Clickint x = 5;のローカル変数宣言からアクセス修飾子を削除することです。変数xbutton3_Clickでアクセスする必要がある場合にのみ使用し、button3_Clickが呼び出されるたびに新しい変数がインスタンス化されるようにしてください。

コンパイルエラーを修正する別の方法は、xをローカル変数からフィールドに変更することです。 xがどこに定義されているかを変更することにより、スコープのローカル変数ではなく、Form1のフィールドとして宣言することができます。

試してみてください。

public partial class Form1 : Form 
{ 
    public int x; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     x = 5; 
     MessageBox.Show(x.ToString()); 
    } 
} 

、あなたのプログラムの中で他のメソッドからxフィールドにアクセスする必要がある、またはあなたがForm1インスタンス上button3_Click方法の複数の呼び出し間で値を保存したい場合は、このオプションは好適です。これらのケースであれば

、あなたもxの読み取り、書き込み、および/または計算をよりきめの細かい制御を得るために、代わりにfieldxpropertyを作るために決めることができました。

+0

非常に良い説明! +1 –

関連する問題