gpt4 book ai didi

c# - 在不知道 C# 类名称的情况下转换为基类

转载 作者:行者123 更新时间:2023-11-30 15:58:32 24 4
gpt4 key购买 nike

我一直在用 C# 实现访问者模式。我拥有的是:

类的层次结构:

public class A {
public virtual void Accept(Visitor visitor)
{
visitor.Visit(this);
}
}

public class B : A {
public override void Accept(Visitor visitor)
{
visitor.Visit(this);
}
}

访问者类:

public abstract class Visitor {
public virtual void Visit(A item) {
//...
}
public virtual void Visit(B item) {
Visit(item as A);
}
}

具体的 Visitor 类:

public class ConcreteVisitor : Visitor {
public override void Visit(B item) {
// do something
// and call Visit for base class
Visit(item as A); // I need to know type A.
}
}

有没有办法在不知道其直接基类名称的情况下为 item 的基类调用 Visit?我希望能够在不更改 ConcreteVisitor 类的情况下更改层次结构。

谢谢

最佳答案

让它成为A的责任。以一个方法为例:

public class A {
public virtual void Accept(Visitor visitor)
{
visitor.Visit(this);
}
public A AsBase()
{
return this;
}
}

public class ConcreteVisitor : Visitor {
public override void Visit(B item) {
// do something
// and call Visit for base class
Visit(item.AsBase()); // convert to base type
}
}

PS:你的设计可能有点奇怪,但我被你的问题挑战了;)

关于c# - 在不知道 C# 类名称的情况下转换为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43171199/

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