مشكلة SCOPE المتغيرة الفئة الثابتة في C# winforms - لماذا لا يعمل هذا الشيء من التعليمات البرمجية؟
-
20-09-2019 - |
سؤال
لقد حصلت على نموذجين مختلفين في تطبيق WinForms الخاص بي (Mainform و Form2 say). كلاهما يطلب الوصول إلى MyDataset ، من خلال طريقة ثابتة "getInstance". المشكلة بعد أن حصلت Mainform على مثيل ، عندما يحتاج Form2 إلى الحصول على مثيل ، يكون متغير "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)
{
return new MyDataSet();
}
else
{
return myDataSet;
}
}
لذلك يبدو تقريبًا أن متغير "myDataset" الثابت لا يعمل من حيث وجود مثال مرة واحدة فقط؟
المحلول
لقد نسيت تعيين مثيل إنشاء حديثًا إلى 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.
سأذهب مع الإصدار الرابع أو الخامس ، إذا كنت بحاجة إلى مفردة.