我有一个包含许多类的复合类结构。由于许多不同的原因(验证、克隆、导出为 xml 等),需要遍历此结构,因此编写使用访问者模式是有意义的。给定以下类结构
class Owner
{
public string Name { get; set; }
public List<Owned> Liked { get; private set; }
public List<Owned> Disliked { get; private set; }
public Owner()
{
this.Liked = new List<Owned>();
this.Disliked = new List<Owned>();
}
}
class Owned
{
public string Name { get; set; }
}
如果我想生成这样的 XML,应该如何实现这样的访问者模式
<owner>
<name>Owner 1</name>
<likedThings>
<owned>
<name>Liked thing 1</name>
</owned>
<owned>
<name>Liked thing 2</name>
</owned>
</likedThings>
<dislikedThings>
<owned>
<name>Disliked thing 1</name>
</owned>
<owned>
<name>Disliked thing 2</name>
</owned>
</dislikedThings>
</owner>
我关心的第一件事是,通常我会有 VisitOwner 和 VisitOwned,这对于验证来说效果很好,但在 XML 中,我需要将 Owned 对象包装在它们各自的 likeThings 或 dislikedThings XML 节点中。
我关心的第二件事是,对于尚未为组合的任何新部分(例如,新属性“List<Owned> SmellyThings”)实现操作的每个现有访问者实现,我想要一个编译时错误