C#winformsの静的クラス変数スコープの問題 - なぜこのコードが機能しないのですか?

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

質問

WinFormsアプリには2つの異なるフォームがあります(MainformとForm2 Say)。彼らは両方とも、「getinstance」静的法を介して、mydatasetへのアクセスを求めます。問題は、MainFormがインスタンスを取得した後、Form2がインスタンスを取得する必要がある場合です。何か案は?

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回だけインスタンスを持つという点で機能していないようです。

役に立ちましたか?

解決

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

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

他のヒント

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

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

これを見てください 論文 ジョン・スキートから。他の人が言ったように、あなたは変数を設定していないが、より堅牢なパターンを実装したり、シングルトンを取り除くこともできます。そのため、mydatasetの複数のインスタンスが作成される可能性があります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top