2015-02-06 11 views
1

我有以下情形填充基繼承的類作爲一個對象,而不是每一個屬性

方案1聯:

public class TT : t 
{ 
    public int x { get; set; } 
    public TT(t name, int name2) 
    { 
     this.att1 = name.att1; 
     this.att2 = name.att2; 
     this.att3 = name.att3; 
     x = name2; 
    } 
} 

方案2:

public class TT : t 
{ 
    public int x { get; set; } 
    public TT(t name, int name2) 
    { 
     this = name; 
     x = name2; 
    } 
} 

有一種方法來傳遞基類繼承類「t」作爲一個整體對象,而不是必須從基類的屬性分配每個屬性?

回答

1

有沒有辦法將基類繼承的類「t」作爲整個對象傳遞,而不必從基類的屬性中指定每個屬性?

不能。您不能在類(或任何其他方法)的構造函數中重新指派this。另外,請記住,name將是一個參考到一個對象,而不是對象本身,所以即使您可能重新分配this,你會指向同一個對象,而不是複製它的值。

您將需要逐個字段複製源類中的值。無論你是在這個構造函數中還是在一個基礎構造函數中(如果你有多個你想要添加這個功能的子類,這會很有幫助),你是否明確地使用或者使用反射是由你決定的。

0

你可以在基類中創建copy constructor,並使用它像這樣:

public class TT : t 
{ 
    public int x { get; set; } 
    public TT(t name, x name2):base(name) 
    { 
     x = name2; 
    } 
} 

如果你不想處理基本副本構造函數中,你可以使用ReflectionExpression Trees以使自動化它

相關問題