1

WinFormsアプリには2つの異なるフォームがあります(MainFormとForm2と言います)。どちらも、「getInstance」静的メソッドを介してMyDataSetへのアクセスを要求します。問題は、MainFormがインスタンスを取得した後、Form2がインスタンスを取得する必要があるときに、静的な「myDataSet」変数がnullであるのに対し、すでに設定されていると予想している場合です。何か案は?

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」変数は、インスタンスが1つしかないという点では機能していないようです。

4

4 に答える 4

7

新しく作成したインスタンスをmyDatasetに割り当てるのを忘れました

if(myDataSet == null)
{
    myDataSet = new MyDataSet();
}
return myDataSet
于 2010-01-13T02:45:23.743 に答える
2

設定しませんでした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;

    }
于 2010-01-13T02:45:28.120 に答える
1
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;
        }
    }
于 2010-01-13T02:47:26.937 に答える
0

JonSkeetのこの記事をご覧ください。他の人が言っているように、変数を設定していませんが、より堅牢なパターンを実装するか、シングルトンを削除することもできます。現状では、MyDataSetの複数のインスタンスが作成される可能性があります。

シングルトンが必要な場合は、4番目または5番目のバージョンを使用します。

于 2010-01-13T02:50:01.800 に答える