我有一个问题,我认为可能很容易解决,但因为我是一个C#noob,我无法理解我做错了什么。我有两个功能:addValues()
和showMessage()
。我的问题出在addValues()
。我有两个MessageBox
显示了他们应该显示的内容,但在showMessage()
函数中没有收到值,它总是告诉我那天和dias.Count
是0.我做错了什么?谢谢!
在Form1上:
public List<Despesas> dias = new List<Despesas>();
public struct Despesas
{
public double transportes;
public double alimentacao;
public double vestuario;
public double agua;
public double luz;
public double educacao;
}
课堂管理:
class management : Form1
{
int day=0;
public double addValues(double transportes, double alimentacao)
{
Despesas dia = new Despesas();
try
{
dia.transportes = transportes;
dia.agua = agua;
dias.Add(dia);
}
catch
{
MessageBox.Show("Error", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
MessageBox.Show("Count " + dias.Count);
day++;
MessageBox.Show("" + day);
return day;
}
public void showMessage()
{
MessageBox.Show("Day " + day);
MessageBox.Show("Count: " " + dias.Count);
for (int i = 0; i < day; i++)
{
MessageBox.Show("Agua: " + dias[i].agua + "\nTransportes: " + dias[i].transportes);
}
}
答案 0 :(得分:2)
在评论中,您提到您实际上有两个<{1}}类的实例。
对象的一个实例的更改不会传播到该对象的其他实例(除非它在management
成员上被修改,但有点不同)。
即使您修改了基类成员,也是如此。这是因为派生类的实例化也实例化了一个新的基类对象。
解决方案是只使用一个static
对象实例,并根据需要传递它。您可以像其他任何类型一样执行此操作:
management
其他几点说明:
public void Foo(management myClass)
{
...
}
不是一个非常好的名字,因为它不是很具描述性。此外,C#中的类名应为PascalCase,因此它应为management
Management
和management
之间的正确关系。 Form1
真的是&#34;&#34;类型的&#34;或&#34;是&#34; management
?