Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从两个交替的类中创建对象的层次结构?_C#_Xml_Generics - Fatal编程技术网

C# 如何从两个交替的类中创建对象的层次结构?

C# 如何从两个交替的类中创建对象的层次结构?,c#,xml,generics,C#,Xml,Generics,以下是场景: 我有两个类(“Page”和“Field”),它们是从一个公共类(“Pield”)派生而来的。 它们表示XML文件中的标记,并位于以下层次结构中: <page> <field> <page> ... </page> ... </field> ... </page> ... ... ... 即:页面和字段对象处于交替

以下是场景:

我有两个类(“Page”和“Field”),它们是从一个公共类(“Pield”)派生而来的。
它们表示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要求,我会在页面和字段中添加父属性。我还将页面/字段属性转换为列表。但你有要点。