2012-02-11 7 views
-2

以下は自分のプロジェクトのコードビハインドファイルです。わかりますが、私はPage_Loadの "SecretNumber"というクラスのオブジェクトをインスタンス化しています。私は最近、参照をスコープ(個人SecretNumber guessNr)から忘れてしまったので、ボタン関数のオブジェクト参照にアクセスする際に問題が発生しました。オブジェクトのインスタンス化中に奇妙なエラーが発生しました

しかし、いくつかの奇妙な理由によって、このコードは次のエラーを生成します。 "フィールド '_Default.guessNr'は割り当てられず、常にデフォルト値がnullになります。

「秘密のSecretNumber guessNr」(エラーを生成しています)を削除すると、ボタン関数からオブジェクト参照に到達できない問題が再び発生します。そのため、参照がオブジェクトに割り当てられています。

どのようにこのエラーが発生し、解決するにはどうすればよいですか?

public partial class _Default : System.Web.UI.Page 
{ 
    private SecretNumber guessNr; 

    protected void Page_Load(object sender, EventArgs e) { 
     SecretNumber guessNr = new SecretNumber(); 
    } 

    protected void btnCheckNr_Click(object sender, EventArgs e) { 
     if (!Page.IsValid){ 
      return; 
     } 

     // The rest of the code goes here 
    } 
} 
+2

回答をコピー/ペーストすることはできませんか? http://stackoverflow.com/a/9244437/932418 –

+0

[インスタンス化されたオブジェクトC#/ asp.netにアクセスできない]の重複可能性(http://stackoverflow.com/questions/9244405/cant-access-instantiated-object -c-asp-net) –

+0

これは重複していません。違いは、私は重要な行である "秘密SecretNumber guessNr"を追加したことです。 Btw、質問は異なっていた。 – holyredbeard

答えて

1

は、あなたが同じ名前のローカル変数を宣言している、あなたのPage_Loadメソッド

private SecretNumber guessNr; // declared field here 

protected void Page_Load(object sender, EventArgs e) { 
    guessNr = new SecretNumber(); 
} 

内部の微妙な変化をあなたがそれを持っている方法を確認する必要があります。メソッド内でクラスレベルのフィールドを非表示にしています。

int x; // this is a class level field 
int y; // same 

public void Foo() 
{ 
    int x; // this is a local of the same name 
    this.x = 7; // this is how you would access the class field from this method 
    y = 4; // no need for "this." for disambiguation 
} 
関連する問題