gpt4 book ai didi

c# - 访问者模式,删除需要转换

转载 作者:行者123 更新时间:2023-11-30 15:12:48 25 4
gpt4 key购买 nike

我有一个关于访问者模式的问题,我目前有两个程序集。我的第一个程序集包含多个接口(interface)。

public interface INode
{
void Visit(INodeVisitor visitor);
}

public interface INodeVisitor
{
void VisitContainer(IContainer container);
}

public interface IContainer : INode
{
}

还有我的第二次组装

    class Program
{
static void Main(string[] args)
{
ContainerVisitor visitor = new ContainerVisitor();
visitor.VisitContainer(new Container());
}
}

public class ContainerVisitor : INodeVisitor
{
public void VisitContainer(IContainer value)
{
Container container = value as Container;
// Do some stuff...
}
}

public class Container : IContainer
{
public void Visit(INodeVisitor visitor)
{
visitor.VisitContainer(this);
}
}

我想做的是避免在 ContainerVisitor 类中强制转换,我想直接引用 Container。我无法更改接口(interface) INodeVisitor 接口(interface)以使用 Container。有任何想法吗?我应该投吗?

干杯

罗汉

最佳答案

转型是不可避免的,但您可以将其抽象出来一点,将其从实际的 ContainerVisitor 类中移除。

public class NodeVisitor<T> : INodeVisitor where T : IContainer {
public void VisitContainer(T node) {
var container = node as T;
if ( container != null ) {
VisitTyped(container);
}
}
protected abstract VisitContainerTyped(T container);
}

现在 ContainerVisitor 可以派生自 NodeVisitor 并避免转换

public class ContainerVisitor : NodeVisitor<Container>{
protected override void VisitContainerTyped(Container container){
// Do some stuff...
}
}

关于c# - 访问者模式,删除需要转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672141/

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