类变量被赋值为null

时间:2014-06-05 00:20:07

标签: c# class variables methods

我有一个主要表单,我在其中分配一些变量并将它们传递给myclass.cs。我需要在myclass.cs中使用类变量,因为我需要在该类的几个地方使用这些变量。

我可以在myclass.cs的CustomerParams方法中正确地看到变量,所以我知道他们已经到了那里。但是,如果我在InitializeComponent()之后调用它们,它们总是返回null; of myclass.cs。如果我在另一个事件处理程序中调用它们,例如在myclass.cs中单击一个按钮,那么它们总是返回指定的第一个变量,并且当我从mainform中的列表框中选择不同的变量时,它们永远不会更新(甚至认为他的CustomerParams方法继续更新为预期)。我做错了什么?

mainform.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 + ")");
    }
}

3 个答案:

答案 0 :(得分:2)

在InitializeComponent()之后,您将获得null,因为没有为变量分配任何内容。它们在CustomerParams中具有值,因为您将它们设置为通过该方法的参数。您为这些变量分配值的唯一位置是CustomerParams方法,因此它们永远不会更改该方法之外的值。

答案 1 :(得分:0)

修正了问题。我最后做的是在我的主要表单中我创建了一个静态方法,我在其中分配变量,然后为我的按钮单击以及myclass中的静态方法调用,然后我将其分配给变量。

答案 2 :(得分:0)

我刚刚学习c#(来自C ++),我遇到了同样的问题。解决方案是声明类变量STATIC。我想因为类从未实例化,所以变量必须是静态的。在这里解释:

https://msdn.microsoft.com/en-us/library/79b3xss3.aspx#Anchor_0