منشئ مهيئ لا يسمح لي أن استخدام 'هذا'
-
03-07-2019 - |
سؤال
خطأ مترجم الكلمة 'هذا' غير متوفر في السياق الحالي
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";
}
}
لا تنتمي إلى StackOverflow