2013-02-10 61 views
1
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? 
    } 
} 

我了解(或多或少),这不应该做这样了,一直问一千遍,因为每一个变化,应通过方法 - 但:基类变量/直接访问对象的C#

如果我们待在世界和机器人的例子中,后面我想要有一个像这样的机器人的方法:robot.MoveBox(25) 其中机器人必须有权访问世界,一个对象框并更新绘图对象(网格,形状等) 我现在唯一能拿出来的,就是传递机器人的每种方法(如moveboxrobotChangesData)全世界+方块+绘图s凝灰岩作为'参考',他可以改变它然后.. 但每种方法看起来像robot.MoveBox(25, ref myworldObject, ref myworldBoxes,ref etc etc)

这真的是正确的路要走吗?还是我错过了重要的事情?

+3

一个'Robot'是不是“世界”。你滥用继承。 – SLaks 2013-02-10 14:54:09

+0

你误解了'ref'。 http://www.yoda.arachsys.com/csharp/parameters.html – SLaks 2013-02-10 14:55:03

回答

0

也许一个例子有助于:

你的机器人基类

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! 
    } 
} 
+0

我想我开始明白了..谢谢! – atair 2013-02-10 15:50:13

+0

很酷,如果现在没有别的东西,请接受答案,以便其他人知道您的问题已解决。干杯 – bas 2013-02-10 15:57:17

0

你不要把它作为参考。

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

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

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