2015-08-15 91 views
4

我正在尋找使用父實例實例化的子類來設置所有的繼承變量。如何從父實例實例化子實例

例如:

public class Foo 
{ 
    //Variables 
} 

public class bar : Foo 
{ 
    public int ID { get; set; } 

    public bar(Foo instance) 
    { 
     base = instance; // Doesn't work but is generally the idea I'm looking for 
    } 
} 

回答

0

你將不得不讓所有的成員公開內部Foo,將需要從構造函數中設置。然後,設置你需要的屬性。

0

爲什麼你不能通過像下面這樣的公共汽車屬性來完成它。順便說一句,你試圖有什麼是Composition其中bar對象是由foo對象組成。不知道你爲什麼仍然繼承foo呢?

public class bar : Foo 
{ 
    public int ID { get; set; } 
    public Foo baseinstance { get; set;} 

    public bar(Foo instance) 
    { 
     baseinstance = instance; 
    } 
} 

我沒有絕對的把握,但是從您發佈的代碼(特別是以下部分),感覺就像你正在嘗試,因爲你說

我期待調用基類的構造函數或constructor initializer獲取使用父實例 實例化的子類,以設置所有繼承的變量。

public bar(Foo instance) 
{ 
    base = instance; 
} 

這實際上應該是

public bar(Foo instance) : base() 
{ 
    //child instance initialization 
} 

但是當你實例子對象的構造函數初始化將被調用和基類的意志得到第一初始化,爲了這不是需要一個無參數的構造函數的原因在子初始化之前已經初始化了基本成員。

如果在基礎參數的構造函數和孩子,那麼你可以顯式調用基類的構造

+0

我使用的是類作爲與EF6使用實體和AFAIK EF使用一個類中的屬性,形成一個表。 baseinstance將創建一個由主鍵和外鍵鏈接的獨立表。 – Qinusty

+0

@Qinusty,如果有幫助,請參閱編輯答案。 – Rahul

0

我認爲你正在尋找某種映射器從一個對象映射到另一個。

您可以使用像AutoMapperValueInjecter這樣的開源項目,它可以在NuGet上找到。

這裏也是一個很好的文章: Copy values from one object to another

演示與ValueInjecter

static void Main(string[] args) 
{ 
    var foo = new Foo() 
    { 
     Property1 = "Value1", 
     Property2 = "Value2" 
    }; 

    var bar = Mapper.Map<Bar>(foo); 
    bar.Id = 3; 

    Console.WriteLine(bar.Id); //3 
    Console.WriteLine(bar.Property1); //Value1 
    Console.WriteLine(bar.Property2); //Value2 
} 
0

只是一個構造函數添加到接受Foo實例,並採取複製領域的照顧你的父母Foo類。 Bar類可以調用它作爲基礎構造函數。

public class Foo 
{ 
    private string var1; 
    private string var2; 

    public Foo() { } 

    public Foo(Foo otherFoo) 
    { 
     this.var1 = otherFoo.var1; 
     this.var2 = otherFoo.var2; 
    } 
} 

public class Bar : Foo 
{ 
    public int ID { get; set; } 

    public Bar(Foo instance) 
     : base(instance) 
    { 
    } 
}