classe statica problema portata variabile in C # WinForms - perché non fa questo po 'di lavoro codice?
-
20-09-2019 - |
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?
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.