public class myWorld
{
public int data;
public void ChangeData()
{
data = 10;
}
}
public class myRobot : myWorld
{
public void robotChangesData()
{
//how can i make the robot change the data in world?
}
}
我理解(或多或少)这不应该这样做,并且已被问过一千次,因为每次改变都应该通过方法 - 但是:
如果我们留在世界和机器人的例子中,稍后我想为机器人提供一种方法:robot.MoveBox(25)
机器人必须访问世界的位置,对象框,并对绘图对象(网格,形状等)进行更新
我现在唯一可以想出的就是通过机器人的每一种方法(如movebox
或robotChangesData
)整个世界+盒子+绘图的东西作为'参考',他可以改变它然后..
但每种方法看起来都像robot.MoveBox(25, ref myworldObject, ref myworldBoxes,ref etc etc)
这真的是正确的方法吗?还是我错过了重要的事情?
答案 0 :(得分:4)
也许一个例子有帮助:
您的机器人基类
public class RobotBase
{
protected int data;
// Reference to the world
protected World _world;
public RobotBase(World world)
{
_world = world;
}
public void ChangeData()
{
data = 10;
}
}
你的机器人课程:
public class Robot : RobotBase
{
public Robot(World world) : base(world)
{}
public void RobotChangesData()
{
//Change data in base
data = 20;
// Change data in world, the object is passed by reference, no need for further "ref" declarations
_world.Terminate();
}
}
你的世界级:
public class World
{
public void Terminate()
{
// terminate world! noooess!
}
}