C#winformsの静的クラス変数スコープの問題 - なぜこのコードが機能しないのですか?
-
20-09-2019 - |
質問
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番目のバージョンを使用します。
所属していません StackOverflow