-3

なぜ私の変数がデータを保存しないのか疑問に思っていました。これは私のコードです

class MainProg
{
  public string name;
  static void Main()
  {
   MainProg m = new MainProg();
   m.Start();
  }
  public void Start()
 {
 Register rs = new Register();
    Register r = (Register)rs;

    r.run();
    Console.WriteLine(name);

 }


}


class Register : MainProg
{
  public void run()
  {
    name = "a";
  }
}

何か忘れてしまいましたか?出力を表示しようとすると何も表示されません。お時間を割いていただきありがとうございます。

4

5 に答える 5

5

これは機能します。

class MainProg
{

    static void Main()
    {
        Register rs = new Register();
        Register r = (Register)rs;

        r.run();
        Console.WriteLine(r.name);
    }

}


class Register : MainProg
{
    public string name;
    public void run()
     {
        name = "a";
     }
}

コードが失敗する理由は、Registerのインスタンスを作成しているためです。このインスタンスは、MainProgから継承されていても、MainProgとは別のものです。新しいインスタンスに変数を設定してから、古いインスタンスから変数を読み取ります。

于 2012-07-13T11:05:09.330 に答える
2

nameはインスタンスフィールドであるため、の参照が必要ですobject

試す、

Console.WriteLine(r.name);
于 2012-07-13T11:05:13.040 に答える
1

呼び出されたRegisterのインスタンス内で名前を変更しているためr、MainProgのインスタンス内で変数名を出力します。

それを証明するには、次のことを試してください。

Console.WriteLine(r.name); 
于 2012-07-13T11:04:28.830 に答える
0

静的関数内のメンバー変数にアクセスしようとしているため、コンパイルエラーがスローされます。

次のようなオブジェクトを使用して変数にアクセスしてみてください

Console.WriteLine(r.name);
于 2012-07-13T11:05:30.170 に答える
0

問題は、このオブジェクトから名前を書き込もうとしていることです。変更した変数は、他のオブジェクト'r'にあります。

于 2012-07-13T11:13:49.493 に答える