나는 다음과 같은 것을 달성하기 위해 노력하고 있어요 :문제 (생성자에서 가상 멤버 호출)
class Foo
{
public virtual int Number { get; set; }
public Foo(int n)
{
Number = n; //Virtual member call in constructor
}
public void Do() {
Console.WriteLine(Number);
}
}
class Bar : Foo
{
public override int Number
{
get
{
return x.Val;
}
set
{
x.Val = value;
}
}
Bar(int n) : base(n)
{
X x = new X();
x.Val = n;
}
public void F() {
x.Something(); //changes x.Val
}
}
전화했을 때 나는
Do
에 대한 호출을 전달해야하기 때문에 나는이 일을하고 그 이유는
유형은 Bar
입니다.
이제 나도 즉 직접 x
의 Val
속성을 노출, 현재 상황으로 Foo
또는 Bar
에서 이렇게 Number
요구를 상속 객체를 가질 수 있습니다. 아직 초기화되지 않았을 n
서브 클래스에서 x
이후 (Virtual member call in constructor
) Number
에 할당 할 때
Bar b = new Bar(5);
b.F(); //changes the value of Val in x
b.Do(); //Needs to print the correct, modified value
여기서 문제는, Foo
에 분명히 : 나는 다음과 같은 코드를 허용 할 필요가 있기 때문이다.
그런 디자인을 구성하는 더 좋은 방법은 무엇이라고 생각하십니까? 나는 아직 초기화되지 않았을 Bar
에서 Number
에서 x
이후 Object Reference not set to an Instance of an Object
예외가 발생 생성자에서 가상 멤버를 호출하고 있기 때문에
나는이 현재 코드를 사용할 수 없습니다.
은 슈퍼에서 비 final 메소드를 호출하는 나쁜 관행입니다 클래스 생성자. – Zaki
그래, 그 이유는 내가 대안 디자인을 요구하고있어. –