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)
这真的是正确的方法吗?还是我错过了一些重要的事情?
尽可能清理代码以显示我的问题。基本上它是一个八叉树搜索+相交。intersect 函数来自一个 SDK(整个项目是一个犀牛插件)。如果我使用交叉调用进行循环,它比通过八叉树进行递归搜索快 10 倍。甚至更奇怪 - 我隔离了相交调用的时间 - 在递归内部它比循环慢 8 倍。它的行为可能有 1000 个原因,但我希望我犯了一些明显的错误,有人可以通过查看代码发现。
有一个缓慢的递归部分:
public void NewRayCast()
{
int runs = 500000; //how many rays we cast
Point3d raypos = new Point3d(0, 0, 0); //raystart
Ray3d ray = new Ray3d();
Random r = new Random(); //here we create targets to scatter the ray directions
Vector3d[] targets = new Vector3d[runs];
for (int i = 0; i < runs; i++)
{
targets[i] = new Vector3d(r.NextDouble() * 200 - 100, 500, r.NextDouble() * …Run Code Online (Sandbox Code Playgroud)