Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 变量未在C中保存数据#_C#_Variables - Fatal编程技术网

C# 变量未在C中保存数据#

C# 变量未在C中保存数据#,c#,variables,C#,Variables,我一直在想为什么我的变量没有保存数据。这是我的密码 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(); Conso

我一直在想为什么我的变量没有保存数据。这是我的密码

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";
  }
}

我忘记了什么吗?每次我试图显示输出时,它都没有显示任何内容。顺便说一下,感谢您花时间。

因为您正在更改名为
r
的寄存器实例中的名称,然后您在MainProg实例中打印变量名称

要证明这一点,请尝试:

Console.WriteLine(r.name); 
这会奏效的

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分离,即使它继承自它。在新实例中设置变量,然后从旧实例中读取。

name
是一个实例字段,因此需要引用
对象

试试看


由于您试图访问静态函数中的成员变量,它将抛出编译错误

尝试使用类似对象的方法访问变量

Console.WriteLine(r.name);

问题是您正试图从该对象写入名称。您更改的变量位于另一个对象“r”中。

检查控制台中的r.name.writeLine单步执行代码时会发生什么?它是否设置过名称?您的程序甚至没有以这种形式编译。我想知道为什么要编译这段代码。变量名是类成员,无法在方法Main.marchemike的静态上下文中访问。marchemike-您仍在一个实例中设置名称,并从另一个实例中读取它-阅读我的答案这很容易成为注释。除了您的陈述不再适用于该问题外,作者对其进行了修改,可能要更新它。@Ramhound:当已经有一些答案时,编辑这个问题是不对的。这很容易成为一个评论。是的,但我觉得它回答了他的问题。他问为什么没有结果,而不是如何得到结果。
Console.WriteLine(r.name);