gpt4 book ai didi

c# - 访问者模式——接口(interface)与抽象类

转载 作者:行者123 更新时间:2023-11-30 14:56:34 25 4
gpt4 key购买 nike

我目前正在尝试为更简单的语言编写一个简单的编译器,但我在添加 Visitor 模式时遇到了问题。我有一个如下所示的 ILanguageVisitor 界面:

interface ILanguageVisitor {
void Visit(GlobalStructure cs);
void Visit(GotoStructure cs);
void Visit(IfStructure cs);
void Visit(ElseIfStructure cs);
void Visit(ElseStructure cs);
...
}

必须实现所有这些方法才能为特定架构创建具体的访问者。但除此之外,还有一些方法和字段应该对所有可能的访问者都是通用的。

例如, block 的功能由两个或多个 Visit 调用组成,例如:

Visit(If) 
...
Visit(Else)
...
Visit(EndIf)

Visit(For)
...
Visit(EndFor)

这是因为 block 开始和终止的规则(比如一个 block 中不能有两个 else,或者那个子 block 不能被父 block 终止,例如 For ... 如果 ... EndFor).

我的问题是:如果我有一个应该对所有 Visitor 通用的行为,我是否应该创建一个抽象的 Visitor 类,这将使这些特定方法成为 virtual和其他摘要

如果我在其基础上添加一个默认行为,是否会丢失 Visitor 的积​​分?

最佳答案

在这种情况下,我认为最好的解决方案是同时拥有一个接口(interface)和一个实现该接口(interface)并允许用户覆盖某些方法的基类。这样,用户可以决定他是否愿意:

  • 继承基类并已经为他实现了部分或大部分功能(可能会以灵 active 为代价)
  • 亲自实现整个界面,实现最大程度的控制和灵 active 。

关于c# - 访问者模式——接口(interface)与抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com