1

我的 WinForms 应用程序中有两种不同的表单(例如 MainForm 和 Form2)。他们都通过“getInstance”静态方法请求访问 MyDataSet。问题是在 MainForm 获得一个实例之后,当 Form2 需要获得一个实例时,静态“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)
        {
            return new MyDataSet();
        }
        else
        {
            return myDataSet;
        }
    }

因此,就只有一次实例而言,静态“myDataSet”变量似乎不起作用?

4

4 回答 4

7

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

if(myDataSet == null)
{
    myDataSet = new MyDataSet();
}
return myDataSet
于 2010-01-13T02:45:23.743 回答
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;

    }
于 2010-01-13T02:45:28.120 回答
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;
        }
    }
于 2010-01-13T02:47:26.937 回答
0

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

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

于 2010-01-13T02:50:01.800 回答