classe statica problema portata variabile in C # WinForms - perché non fa questo po 'di lavoro codice?

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

Domanda

Ho due forme diverse nel mio WinForms app (MainForm e Form2 dicono). Entrambi chiedono un accesso di MyDataSet, attraverso un metodo statico "getInstance". Il problema è dopo MainForm ha ottenuto un esempio, quando Form2 deve ottenere un'istanza statica "MyDataSet" variabile è nulla, mentre mi aspetto di essere stato già impostato? Tutte le idee?

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

Quindi, sembra quasi il "MyDataSet" variabile statica non funziona in termini di avere solo una volta esempio?

È stato utile?

Soluzione

si è dimenticato di assegnare l'istanza appena creato per l'MyDataSet

if(myDataSet == null)
{
    myDataSet = new MyDataSet();
}
return myDataSet

Altri suggerimenti

Non hai impostato myDataSet

Questo è il codice corretto:

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

Date un'occhiata a questo articolo da Jon Skeet. Come altri hanno detto che non sta impostando la variabile, ma si potrebbe anche voler implementare un modello più robusto, o forse sbarazzarsi del Singleton. Come è si potrebbe finire più istanze in fase di creazione di MyDataSet.

Vorrei andare con la quarta o quinta versione, se avete bisogno di un Singleton.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top