C# 如何从两个交替的类中创建对象的层次结构?
以下是场景: 我有两个类(“Page”和“Field”),它们是从一个公共类(“Pield”)派生而来的。C# 如何从两个交替的类中创建对象的层次结构?,c#,xml,generics,C#,Xml,Generics,以下是场景: 我有两个类(“Page”和“Field”),它们是从一个公共类(“Pield”)派生而来的。 它们表示XML文件中的标记,并位于以下层次结构中: <page> <field> <page> ... </page> ... </field> ... </page> ... ... ... 即:页面和字段对象处于交替
它们表示XML文件中的标记,并位于以下层次结构中:
<page>
<field>
<page>
...
</page>
...
</field>
...
</page>
...
...
...
即:页面和字段对象处于交替类型的层次结构中(层次结构的每个梯级可能有多个页面或字段)
每个字段和页面对象都有一个父属性,该属性指向其他类型的相应父对象。这不是问题,除非父子机制由基类(Pield)控制,基类由两个子类(Page和Field)共享
这里有一次尝试,在“Pield child=new Pield(pchild,this);”行失败:
class-Pield
{
私人家长;
...
私生子{
...
Pield child=新Pield(pchild,this);
...
}
...
}
类页:Pield{
...
}
类别字段:Pield
{
...
}
有没有关于如何优雅地解决这个问题的想法
最好的
Millicent在我听来好像你不需要继承,而需要包容。字段不是页面的类型,它包含在页面中。比如:
class Page
{
Field Parent {get;set;}
IEnumerable<Field> Children {get;set;}
}
class Field
{
Page Parent {get;set;}
IEnumerable<Field> Children {get;set;}
}
类页面
{
字段父项{get;set;}
IEnumerable子项{get;set;}
}
类字段
{
页面父项{get;set;}
IEnumerable子项{get;set;}
}
听起来你不需要继承,而需要包容。字段不是页面的类型,它包含在页面中。比如:
class Page
{
Field Parent {get;set;}
IEnumerable<Field> Children {get;set;}
}
class Field
{
Page Parent {get;set;}
IEnumerable<Field> Children {get;set;}
}
类页面
{
字段父项{get;set;}
IEnumerable子项{get;set;}
}
类字段
{
页面父项{get;set;}
IEnumerable子项{get;set;}
}
所以我决定注册,但我不知道如何回复个人帖子,所以我只在这里写回复
首先,感谢您的回复!这里有一些有用的提示,特别是你,ohadsc
我通过删除父类(“Pield”)并将所有相应的代码放入两个子类中解决了这个问题。尽管这两个类背后的思想大体相似,但无论如何,代码都是在父类中的这两个类之间分开的
谢谢大家的帮助
米利森特所以我决定注册,但我不知道如何回复个人帖子,所以我只在这里写回复 首先,感谢您的回复!这里有一些有用的提示,特别是你,ohadsc 我通过删除父类(“Pield”)并将所有相应的代码放入两个子类中解决了这个问题。尽管这两个类背后的思想大体相似,但无论如何,代码都是在父类中的这两个类之间分开的 谢谢大家的帮助
米利森特什么是pchild?为什么失败?什么是pchild?为什么失败?我非常同意。但根据OP要求,我会在页面和字段中添加父属性。我还将页面/字段属性转换为列表。但你有要点,我非常同意。但根据OP要求,我会在页面和字段中添加父属性。我还将页面/字段属性转换为列表。但你有要点。