سؤال

خطأ مترجم     الكلمة 'هذا' غير متوفر في السياق الحالي

delegate void CallBack(int i);
class A
{
    public A(CallBack cb) { }
}
class B : A
{        
    public B() : base(new CallBack(this.f)){}

    private void f(int i) { }
}

لماذا هذا الخطأ؟ كحل فكرت في توفير المنشئ محمية parameterless في A () ويكون

class B : A
{
     public B() : base()   // inherit the new A() ctor
     {
          base.cb = new CallBack(this.f); //this is allowed here
     }
     //...
}
هل كانت مفيدة؟

المحلول

وذلك لأن "هذا" لم يتم إنشاء حتى تشغيل منشئ الفئة الأساسية. في المثال 2ND الخاص قد انتهى من منشئ قاعدة، والآن "هذا" له معنى.

نصائح أخرى

في المثال الأول لم يتم تهيئة المثال B حتى الان. في المجموعة الثانية، هو عليه.

ومنذ الكائن ليس بعد (بالكامل) التي شيدت، وهذا هو منشئ قاعدة كانت لا تعمل بعد، this غير متوفر هناك.

ويجب عليك استخدام أسلوب مجردة / الظاهري.

abstract class A {
    A() {
        this.Initialize();
    }

    abstract void Initialize() { }
}

class B : A {
    string Text;

    B() { }

    override void Initialize() {
        this.Text = "Hello world";
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top