problème statique portée variable de classe en C # WinForms - pourquoi ne pas peu de travail de code?
-
20-09-2019 - |
Question
J'ai deux formes différentes dans mon application WinForms (MainForm et Form2 disent). Ils ont tous deux demandent un accès de MyDataSet, via une méthode statique « getInstance ». La question est après MainForm a obtenu une instance, quand Form2 a besoin d'obtenir une instance de la variable statique « de MyDataSet » est nulle, alors que je pense avoir été déjà mis en? Toutes les idées?
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;
}
}
Il semble donc presque la variable statique « MyDataSet » ne fonctionne pas en termes d'avoir seulement une fois par exemple?
La solution
vous avez oublié d'attribuer la nouvelle à créer une instance MyDataSet
if(myDataSet == null)
{
myDataSet = new MyDataSet();
}
return myDataSet
Autres conseils
Vous n'avez pas défini myDataSet
Ceci est le code correct:
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;
}
}
J'irais avec la quatrième ou cinquième version, si vous avez besoin d'un singleton.