3
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)

这真的是正确的方法吗?还是我错过了一些重要的事情?

4

2 回答 2

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!
    }
}
于 2013-02-10T15:01:15.617 回答
0

您不要将其作为参考传递。

为您的模型创建一个类/对象表示,并将其作为参数传递给您的机器人。

暴露的方法应该对应于他可以改变的变量。

不要对每个世界/模型状态变量使用 refs 和 outs。

于 2013-02-10T14:55:37.080 回答