我的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”变量似乎只有一次实例?
答案 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的多个实例。
如果你需要单身,我会选择第四或第五版。