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

C#winforms中的静态类变量范围问题-为什么';这段代码不管用吗?,c#,winforms,static,static-variables,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

我的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”变量似乎无法仅使用一个实例?

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

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

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

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

您没有设置
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;

    }

您没有设置
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;

    }
请看Jon Skeet的这篇文章。正如其他人所说的,您没有设置变量,但是您可能还希望实现一个更健壮的模式,或者可能摆脱单例。实际上,您可能会创建MyDataSet的多个实例

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

请看Jon Skeet的文章。正如其他人所说的,您没有设置变量,但是您可能还希望实现一个更健壮的模式,或者可能摆脱单例。实际上,您可能会创建MyDataSet的多个实例


如果需要单例,我会选择第四或第五个版本。

作为旁白,myDataSet静态成员应该是私有的。作为旁白,myDataSet静态成员应该是私有的。