Статическая проблема с переменной класса в C# Winforms - почему этот кусочек кода не работает?
-
20-09-2019 - |
Вопрос
У меня есть две разные формы в моем приложении Winforms (Mainform и Form2, скажут). Они оба просят доступ к MyDataset с помощью статического метода «GetInstance». Проблема после того, как 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», не работает только с наличием экземпляра «Однажды»?
Решение
Вы забыли назначить недавно созданный экземпляр 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;
}
}
Взгляните на это статья от Джона Скита. Как сказали другие, вы не устанавливаете переменную, но вы также можете реализовать более надежный шаблон или, возможно, избавиться от Синглтона. Поскольку вы можете в конечном итоге, создаваемые несколько экземпляров MyDataset.
Я бы пошел с четвертой или пятой версией, если вам нужен синглтон.