2
我想實現像下面這樣:問題,在面向對象的設計(在構造虛擬成員調用)
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
類型的變量。現在
,我可以有一個無論是從Foo
或Bar
,繼承從而Number
需求是現在的方式,即直接暴露的x
的Val
屬性的對象。這是因爲我需要讓以下代碼:
Bar b = new Bar(5);
b.F(); //changes the value of Val in x
b.Do(); //Needs to print the correct, modified value
這裏的問題顯然是Foo
,分配自x
從子類n
到Number
(Virtual member call in constructor
)將還沒有被初始化時。
你認爲什麼是更好的方法來構建這樣的設計?
因爲我呼籲從構造,從而導致Object Reference not set to an Instance of an Object
異常,因爲在Number
從Bar
x
不會被初始化尚未虛擬成員,我不能用這個當前的代碼。
這是不好的做法,呼籲從超級非最終方法類構造函數。 – Zaki 2010-07-26 12:34:15
是的,這就是我尋求替代設計的原因 – 2010-07-26 12:36:05