2012-06-29 114 views
0

不同類的屬性之間的屬性採取以下示例代碼:如何共享

public abstract class ElementBase 
{ 
} 

public class ElementOne : ElementBase 
{ 
} 

public class ElementTwo : ElementBase 
{ 
    [XmlElement("element-one", typeof(ElementOne))] 
    [XmlElement("element-two", typeof(ElementTwo))] 
    public ElementBase[] SubElements { get; set; } 
} 

[XmlRoot("root-element")] 
public class RootElement 
{ 
    [XmlElement("element-one", typeof(ElementOne))] 
    [XmlElement("element-two", typeof(ElementTwo))] 
    public ElementBase[] SubElements { get; set;} 
} 

ElementOne.SubElementsElementTwo.SubElements屬性需要保持同步(即,屬性添加到一個需要被添加到其他和參數需要保持不變),原因是在xml中,<element-one>和元素都可以顯示爲<root-element><element-two>的子元素。元素可以以任何順序排列,順序很重要。另外,將來可能會有更多的子元素。由於需要爲屬性保留兩個單獨的位置,因此目前編碼的方式會使維護變得繁瑣且容易出錯。

有沒有辦法讓這兩個屬性「共享」這些屬性,這樣一次編輯就會影響到它們兩個呢?我嘗試了以下內容:

public class CommomAttribute : Attribute 
{ 
    public XmlElementAttribute f = new XmlElementAttribute("element-one", typeof(ElementOne)); 
    public XmlElementAttribute l = new XmlElementAttribute("element-two", typeof(ElementTwo)); 
} 

然後,我用一個[Command]替換上述類屬性的冗餘屬性。這沒有奏效。

另一個問題:有沒有更好的方法來解決這個問題?

回答

1

你可以試試這個,如果你不介意去更深一層去你的子元素項:

public abstract class ElementBase 
{ 
} 

public class ElementOne : ElementBase 
{ 
} 

public class ElementTwo : ElementBase 
{ 
    public SubElementList SubElements { get; set; } 
} 

public class SubElementList 
{ 
    [XmlElement("element-one", typeof(ElementOne))] 
    [XmlElement("element-two", typeof(ElementTwo))] 
    public ElementBase[] Items { get; set; } 
} 

[XmlRoot("root-element")] 
public class RootElement 
{ 
    public SubElementList SubElements { get; set; } 
} 
+0

這是一種可能性。我確實可以控制xml格式。不過,如果我不必這樣做,那會很好,因爲它使xml變得有點醜陋。 – josmith42

0

關閉我的頭頂,我會做到以下幾點:

  1. 在每個類別(一,二)的構造函數,需要和ElementBase的實例,並把它作爲一個私有屬性(讓我們比方說,「SyncingElement」)
  2. 修改子元素的二傳手,與「SyncingElement」

這樣的情況下同步,在這兩個對象的子元素將具有相同的內存地址(相同的實例)。因此,如果某人從一個SubElements的實例修改index [2]處的對象(例如),它也會影響SubElements。

+0

我不是在談論保持性能的情況下同步。我想保持屬性的屬性完全相同。屬性存儲的數據允許不同。 – josmith42

+0

對不起,我不明白你的意思。再讀一遍你的問題,你甚至會說「需要保持同步」。你能解釋得更好嗎? –

+0

也許短語「同步」是一個糟糕的。我在談論編碼維護,而不是運行時行爲。 「ElementOne.SubElements」和「ElementTwo.SubElements」上的屬性需要保持完全相同。如果一個屬性發生變化,則需要另一個更改。如果我添加一個屬性,我需要將它添加到另一個。原因是相同類型的XML元素需要在兩個地方都可用。我想知道我是否可以對它進行編碼,以便在編輯代碼時,我可以在一個地方更改屬性,而不必在兩個地方完成。 – josmith42