C#Winforms中的静态类变量范围问题 - 为什么这一点代码不起作用?
-
20-09-2019 - |
题
我的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的多个实例。
如果您需要单身人士,我会选择第四版或第五版。
不隶属于 StackOverflow