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);