Das Problem der statischen Klassenvariable in C# WinForms - Warum funktioniert dieser Code nicht?

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

Frage

Ich habe zwei verschiedene Formen in meiner WinForms -App (MainForm und Form2 Say). Beide bitten um einen Zugriff auf Mydataset, über eine statische "GetInstance" -Methode. Das Problem ist, dass nach dem MainForm eine Instanz hat, wenn Form2 eine Instanz erhalten muss. Die statische "mydataset" -Variable ist null, während ich voraussichtlich bereits festgelegt worden sein soll? Irgendwelche Ideen?

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

Es scheint also fast, dass die statische "mydataset" -Variable nicht nur einmal funktioniert?

War es hilfreich?

Lösung

Sie haben vergessen, MyDataset die neu erstellte Instanz zuzuweisen

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

Andere Tipps

Du hast nicht gesetzt myDataSet

Dies ist der richtige Code:

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

Schau dir das an Artikel Von Jon Skeet. Wie andere gesagt haben, dass Sie die Variable nicht festlegen, möchten aber auch ein robusteres Muster implementieren oder das Singleton möglicherweise loswerden. So können Sie mehrere Instanzen aus mydataset erstellen.

Ich würde mit der vierten oder fünften Version gehen, wenn Sie einen Singleton brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top