C# 提供C类模块化功能

C# 提供C类模块化功能,c#,inheritance,C#,Inheritance,我的类节点正在处理Person类的实例。 具有最少功能的基类如下所示: public class Node { //attributes protected readonly int steps; protected readonly int angleDeltaQ; //constructor public Node(int steps, int angleDeltaQ) { this.steps = steps;

我的类节点正在处理Person类的实例。 具有最少功能的基类如下所示:

public class Node
{
    //attributes
    protected readonly int steps;
    protected readonly int angleDeltaQ;

    //constructor
    public Node(int steps, int angleDeltaQ)
    {
        this.steps = steps;
        this.angleDeltaQ = angleDeltaQ;
    }

    //methods
    public virtual int UpdateMe(Person me)
    {
        me.angleQ = QMath.RadLimitQ(me.angleQ + angleDeltaQ);
        me.xQ += QMath.CosQ(me.angleQ, me.speedRev);
        me.zQ += QMath.SinQ(me.angleQ, me.speedRev);
        me.steps--;
        if (me.steps == 0) return (int)NodeFeedback.targetReached;                
        else return (int)NodeFeedback.notFinished;
    }
    public virtual void AssignMe(Person me)
    {
        me.steps = steps << me.speedRev;
    }
}
公共类节点
{
//属性
受保护的只读int步骤;
受保护的只读int angleDeltaQ;
//建造师
公共节点(int steps、int angleDeltaQ)
{
这个步骤=步骤;
this.angleDeltaQ=angleDeltaQ;
}
//方法
公共虚拟整数更新(个人名称)
{
me.angleQ=QMath.RadLimitQ(me.angleQ+angleDeltaQ);
me.xQ+=QMath.CosQ(me.angleQ,me.speedRev);
me.zQ+=QMath.SinQ(me.angleQ,me.speedRev);
我;
如果(me.steps==0)返回(int)NodeFeedback.targetReached;
else return(int)NodeFeedback.notFinished;
}
公共虚拟身份分配人(个人身份)
{

me.steps=steps您应该使用访客模式

public abstract class Node
{
    //attributes
    protected readonly int steps;
    public readonly int angleDeltaQ;
    private IUpdateVisitor updateVisitor;

    protected  Node():this(new DefaultUpdateVisitor())
    {

    }
    protected  Node(IUpdateVisitor visiter)
    {
        updateVisiter = visiter;
    }
    //constructor
    public Node(int steps, int angleDeltaQ)
    {
        this.steps = steps;
        this.angleDeltaQ = angleDeltaQ;
    }

    //methods
    public virtual int UpdateMe(Person me)
    {
            updateVisitor.UpdateMe(this,me);
    }
    public virtual void AssignMe(Person me)
    {
        me.steps = steps << me.speedRev;
    }
}



public interface IUpdateVisitor
{
     int UpdateMe(Person me);
}


public class DefaultUpdateVisitor : IUpdateVisitor
{
    public  int UpdateMe(Node node, Person me)
    {
        me.angleQ = QMath.RadLimitQ(me.angleQ + node.angleDeltaQ);
        me.xQ += QMath.CosQ(me.angleQ, me.speedRev);
        me.zQ += QMath.SinQ(me.angleQ, me.speedRev);
        me.steps--;
        if (me.steps == 0) return (int)node.NodeFeedback.targetReached;                
        else return (int)node.NodeFeedback.notFinished;
    }
}


public class AotherUpdateVisitor: IUpdateVisitor
{
 public  int UpdateMe(Node node, Person me)
 {
     .....
 }   
}
公共抽象类节点
{
//属性
受保护的只读int步骤;
公共只读int angleDeltaQ;
私人IUpdateVisitor updateVisitor;
受保护节点():此(新的DefaultUpdateVisitor())
{
}
受保护节点(IUpdateVisitor访问者)
{
updateVisiter=访问者;
}
//建造师
公共节点(int steps、int angleDeltaQ)
{
这个步骤=步骤;
this.angleDeltaQ=angleDeltaQ;
}
//方法
公共虚拟整数更新(个人名称)
{
updateVisitor.UpdateMe(这个,我);
}
公共虚拟身份分配人(个人身份)
{

me.steps=steps Unrelated:“由于抽象方法声明不提供实际实现,因此没有方法体;方法声明仅以分号结尾,签名后没有大括号({})”(来源:)我希望这不会编译。你是对的,请理解这段代码以了解Node应该做什么。我忘了在这个意图的基础上修改声明。我知道你将有另一个派生自
Node
的类。我也知道你想要的可能是“”。这是建设者在考虑你关于使用访问者模式的建议和@Fildor关于使用decorator模式的建议,似乎decorator更适合我的问题。你为什么不这么认为?decorator模式是结构模式类别的一部分,而visiter模式是行为模式类别的一部分。所以如果你看到你的证明是正确的s的行为问题,而不是结构问题。