생성자 이니셜 라이저는 내가 'this'를 사용할 수 없습니다.
-
03-07-2019 - |
문제
컴파일러 오류 키워드 '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";
}
}
제휴하지 않습니다 StackOverflow