2012-06-29 74 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