مشكلة SCOPE المتغيرة الفئة الثابتة في C# winforms - لماذا لا يعمل هذا الشيء من التعليمات البرمجية؟

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

سؤال

لقد حصلت على نموذجين مختلفين في تطبيق 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.

سأذهب مع الإصدار الرابع أو الخامس ، إذا كنت بحاجة إلى مفردة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top