C# 提供C类模块化功能
我的类节点正在处理Person类的实例。 具有最少功能的基类如下所示: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;
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的行为问题,而不是结构问题。