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) に全世界 + ボックス + 描画要素を 'ref' として渡すことであり、彼はそれを変更できます..しかし、すべてメソッドは次のようになります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

refとして渡さないでください。

モデルのクラス/オブジェクト表現を作成し、それをパラメーターとしてロボットに渡すだけです。

公開されたメソッドは、変更可能な変数に対応する必要があります。

各ワールド/モデル状態変数に ref と out を使用しないでください。

于 2013-02-10T14:55:37.080 に答える