我的Winforms应用程序中有两种不同的形式(Mainform和Form2 Say)。他们都要求通过“ getinstance”静态方法访问myDataset。问题是在Mainform拥有一个实例之后,当Form2需要获得一个静态“ 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)
        {
            return new MyDataSet();
        }
        else
        {
            return myDataSet;
        }
    }

因此,似乎静态的“ 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;

    }
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;
        }
    }

看看这个 文章 来自乔恩·斯基特(Jon Skeet)。正如其他人所说的那样,您没有设置变量,但您可能还想实现更强大的模式,或者也许摆脱了单身人士。因为您最终可能会创建MyDataset的多个实例。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top