可能是我無法用言語什麼,我試圖實現準確解釋,但我認爲這個示例代碼可以做:擴展類
class A
{
public string Name
{
get;
set;
}
public virtual void Say()
{
Console.WriteLine("I am A");
Console.Read();
}
public bool ExtendA;
public A GetObject()
{
if (ExtendA)
return new B();
return this;
}
}
internal class B : A
{
public override void Say()
{
Console.WriteLine(string.Format("I am {0}",Name));
Console.Read();
}
}
class Program
{
static void Main(string[] args)
{
var a = new A() {ExtendA = true,Name="MyName"};
A ab = a.GetObject();
}
}
按照上面的代碼字段時Exitend A被設置爲true,並且當我再次嘗試從同一個對象實例中獲取相同類型的對象時,我得到該對象,但它丟失了屬性「Name」的值。
任何建議如何返回具有屬性A的類B?
謝謝
你爲什麼會以這種方式工作?這是沒有意義的... 父類應該**永遠**實例化一個孩子類! –
由於您返回了一個全新的實例,您將失去* ALL *屬性... – Tisho
@Tisho是對的,您可以爲B構造一個接受A的實例並複製屬性的構造函數 – Fr33dan