C# 类变量被赋值为null
我有一个主窗体,其中我分配了一些变量并将它们传递给myclass.cs。我需要在myclass.cs中使用类变量,因为我需要在该类的多个位置使用这些变量 我可以在myclass.cs的CustomerParams方法中正确地看到变量,因此我知道它们正在到达那里。但是,如果我在InitializeComponent之后调用它们,它们总是返回null;myclass.cs的。如果我在另一个事件处理程序中调用它们,例如在myclass.cs中单击按钮,那么它们总是返回分配的第一个变量,并且永远不会得到更新,因为我从mainform中的列表框中选择了不同的变量,即使CustomerParams方法继续按预期更新。我做错了什么 mainform.csC# 类变量被赋值为null,c#,class,variables,methods,C#,Class,Variables,Methods,我有一个主窗体,其中我分配了一些变量并将它们传递给myclass.cs。我需要在myclass.cs中使用类变量,因为我需要在该类的多个位置使用这些变量 我可以在myclass.cs的CustomerParams方法中正确地看到变量,因此我知道它们正在到达那里。但是,如果我在InitializeComponent之后调用它们,它们总是返回null;myclass.cs的。如果我在另一个事件处理程序中调用它们,例如在myclass.cs中单击按钮,那么它们总是返回分配的第一个变量,并且永远不会得到
private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox != null)
{
string customerName = (listBox.SelectedItem.ToString());
MyClass mc = new MyClass();
contentPanel.Controls.Add(mc);
mc.CustomerParams(customerName, customerId);
}
}
myclass.cs
public partial class MyClass : UserControl
{
private int _customerId { get; set; }
private string _customerName {get; set;}
public MyClass()
{
InitializeComponent();
// Shows null values!
Console.WriteLine("Values: " + _customerName + "(" + _customerId + ")");
}
public void CustomerParams(string customerName, int customerId)
{
_customerName = customerName;
_customerId = customerId;
// Shows correct values!
Console.WriteLine("Values-Method: " + _customerName + "(" + _customerId + ")");
}
private void testButton_Click(object sender, EventArgs e)
{
// Only shows the initial value even when the SelectedIndex in mainform.cs changes
Console.WriteLine("Values-Button: " + _customerName + "(" + _customerId + ")");
}
}
InitializeComponent之后将获得null,因为没有为变量分配任何内容。它们在CustomerParams中有一个值,因为您正在将它们设置为通过该方法得到的参数。为这些变量赋值的唯一位置是CustomerParams方法,因此它们不会在该方法之外更改值。修复了该问题。我最终做的是在我的主窗体中创建了一个静态方法,我在其中分配变量,然后为我的按钮单击调用该静态方法,以及在myclass中分配变量我刚学习C++的C++,我遇到了这个问题。解决方案是将类变量声明为静态。我想,因为这个类从来没有实例化过,所以变量需要是静态的。解释如下:
什么是AffiliateProperty?我已经将方法名称和变量更改为用于在线发布的通用方法,这是一个疏忽,我也忘了更改该引用。我已经相应地更新了代码。这是ASP.NET吗?MVC?WinForms?这是针对WinForms的。这个答案似乎不太完整。如果是这样,我就不会在myclass.cs的所有其他方法中收到初始值。我不明白为什么每次运行CustomerParams方法时,该值都没有得到更新,或者为什么在InitializeComponent之后引用变量时只得到null?由于我是在类级别创建变量,所以我认为每次调用CustomerParams时都应该更新变量,但事实并非如此。我是否遗漏了什么,BradleyDotNET?对我来说似乎很简单。@doby48:那么你是说你调用CustomerParams并传递新值,然后属性\u customerId和\u customerName仍然有它们的旧值?我的应用程序就是这样工作的。mainform.cs打开,用户必须单击列表框项,该项反过来调用CustomerParams。此时,CustomerParams方法以及myclass.cs中的所有其他方法中的变量都已更新,尽管初始化Component后仍然为null。然后,用户从列表框中选择另一项,该项又会调用CustomerParams。变量在该方法中再次正确更新,但这次使用myclass.css的其余方法不会再次更新。遗憾的是,您不得不使用静态变量。我从静态变量开始,但不得不删除它们,现在遇到了您描述的问题。静态变量的问题是,它是为整个应用程序容器设置的,在这种情况下似乎不合适。