2014-04-01 34 views
0

我得到了一種樹繼承關係。每個上層節點可以被視爲模板值。而較低的節點具有完全相同的值和一些新的列(值的種類)。C#繼承傳遞模板值

我想知道是否有簡單的方法可以將這些值從上層節點傳遞到下層節點。

我的代碼,如:

public class rootData 
    { 
     public long sID; 
     public string sName; 
     public string title; 
     public string country; 

     <many....many...columns> 

    }; 

    public class sub1 : rootData 
    { 
     public void load(rootData template) 
     { 
      this.sID= template.sID; 
      this.sName= template.sName; 
      this.title= template.title; 
      this.country= template.country; 

      <many....many...asigns> 
     } 
     public int sNumberA; 
     public int sNumberB; 
    }; 

我想知道:有沒有什麼辦法來寫這樣

this.everything=template.everything

,以取代asigns的很多很多行:

  this.sID= template.sID; 
      this.sName= template.sName; 
      this.title= template.title; 
      this.country= template.country; 

      <many....many...asigns> 
+2

如何將關係從「is-a」改爲「has-a」? –

+0

是的,我只是想「有一個」,那麼如何? –

+0

我強烈建議將這些字段轉換爲屬性。 –

回答

0

品牌rootData田野sub1,並添加一個參數到構造函數來填充這個字段。如果rootData中的字段很大程度上是「啞」標籤,我會將其設置爲struct,以說明它只是一個簡單的數據集合,頂部只有很少或沒有邏輯。

正如Erik指出的那樣,物業可能會更好。請注意,您可以將rootData中的各個字段公開爲道具,並避免向其他課程廣播您班級的詳細信息(即其字段爲rootData)。

0

您是否可以做到的答案是您是要繼承還是組合。你想讓sub1成爲rootData?如果是這樣,你將需要複製值。你想sub1包含rootData?如果是這樣,您可以讓sub1保存您傳入的rootData的值。當然,如果您這樣做,則無論如何都不能將其作爲單獨的rootData而不復制值。

我的簡短答案是:創建一個函數來複制值。你只需要做一次。