-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 的实例中打印 var 名称。

为了证明它尝试:

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 回答