C#winforms中的静态类变量范围问题 - 为什么这段代码不起作用?

时间:2010-01-13 02:42:26

标签: c# winforms static static-variables

我的WinForms应用程序中有两种不同的形式(MainForm和Form2说)。他们都通过“getInstance”静态方法请求访问MyDataSet。问题是在MainForm有一个实例之后,当Form2需要获取一个实例静态“myDataSet”变量为null时,我希望已经设置了?有什么想法吗?

public class MyDataSet
{
    public static MyDataSet myDataSet;   
       // This was null 2nd call to getInstance

    private DataSet myData = new DataSet();

    public static MyDataSet GetInstance()
    {
        if (myDataSet == null)
        {
            return new MyDataSet();
        }
        else
        {
            return myDataSet;
        }
    }

所以看起来静态的“myDataSet”变量似乎只有一次实例?

4 个答案:

答案 0 :(得分:7)

您忘记将新创建的实例分配给myDataset

if(myDataSet == null)
{
    myDataSet = new MyDataSet();
}
return myDataSet

答案 1 :(得分:2)

您未设置myDataSet

这是正确的代码:

public class MyDataSet
{
    public static MyDataSet myDataSet;   
       // This was null 2nd call to getInstance

    private DataSet myData = new DataSet();

    public static MyDataSet GetInstance()
    {
        if (myDataSet == null)
        {
            myDataSet =new MyDataSet();
        }

            return myDataSet;

    }

答案 2 :(得分:1)

public class MyDataSet
{
    public static MyDataSet myDataSet;   
       // This was null 2nd call to getInstance

    private DataSet myData = new DataSet();

    public static MyDataSet GetInstance()
    {
        if (myDataSet == null)
        {
            myDataSet = new MyDataSet();      // Changed at this point
            return myDataSet;
        }
        else
        {
            return myDataSet;
        }
    }

答案 3 :(得分:0)

看看Jon Skeet的这个article。正如其他人所说,你没有设置变量,但你可能也想要实现更强大的模式,或者可能摆脱单例。因为它可能会导致创建MyDataSet的多个实例。

如果你需要单身,我会选择第四或第五版。