Статическая проблема с переменной класса в C# Winforms - почему этот кусочек кода не работает?

StackOverflow https://stackoverflow.com/questions/2054021

Вопрос

У меня есть две разные формы в моем приложении 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.

Я бы пошел с четвертой или пятой версией, если вам нужен синглтон.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top