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?
}
}
Run Code Online (Sandbox Code Playgroud)
我(或多或少)明白这不应该这样做,并且已经被问过一千次了,因为每次改变都应该通过方法 - 但是:
如果我们继续以世界和机器人为例,稍后我希望为机器人提供一种方法,例如:robot.MoveBox(25)
机器人必须能够访问世界、对象框,并对绘图对象(网格、形状等)进行更新。)我现在唯一能想到的就是传递机器人的每种方法(例如movebox,或robotChangesData)整个世界+盒子+绘图作为“参考”,然后他可以更改它..但是每个方法看起来像robot.MoveBox(25, ref myworldObject, ref myworldBoxes,ref etc etc)
这真的是正确的方法吗?还是我错过了一些重要的事情?
也许一个例子有帮助:
你的机器人基础类
public class RobotBase
{
protected int data;
// Reference to the world
protected World _world;
public RobotBase(World world)
{
_world = world;
}
public void ChangeData()
{
data = 10;
}
}
Run Code Online (Sandbox Code Playgroud)
您的机器人类别:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
您的世界级:
public class World
{
public void Terminate()
{
// terminate world! noooess!
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21149 次 |
| 最近记录: |