小编ata*_*air的帖子

直接访问基类变量/对象c#

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)

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

c#

3
推荐指数
1
解决办法
2万
查看次数

递归方法比交互方法慢 10 倍

尽可能清理代码以显示我的问题。基本上它是一个八叉树搜索+相交。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)

c# recursion rhino

3
推荐指数
1
解决办法
3333
查看次数

标签 统计

c# ×2

recursion ×1

rhino ×1