문제

컴파일러 오류 키워드 'this'는 현재 컨텍스트에서 사용할 수 없습니다.

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) { }
}

이 오류 인 이유는 무엇입니까? 솔루션으로 나는 ()에서 매개 변수없는 보호 된 ctor를 제공 할 생각을했고

class B : A
{
     public B() : base()   // inherit the new A() ctor
     {
          base.cb = new CallBack(this.f); //this is allowed here
     }
     //...
}
도움이 되었습니까?

해결책

기본 클래스 생성자가 실행될 때까지 "이"가 만들어지지 않았기 때문입니다. 두 번째 예에서 기본 생성자가 완료되었으며 이제 "이것은"의미가 있습니다.

다른 팁

첫 번째 예에서는 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