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

时间:2013-02-10 14:52:40

标签: 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?
    }
}

我理解(或多或少)这不应该这样做,并且已被问过一千次,因为每次改变都应该通过方法 - 但是:

如果我们留在世界和机器人的例子中,稍后我想为机器人提供一种方法:robot.MoveBox(25) 机器人必须访问世界的位置,对象框,并对绘图对象(网格,形状等)进行更新 我现在唯一可以想出的就是通过机器人的每一种方法(如moveboxrobotChangesData)整个世界+盒子+绘图的东西作为'参考',他可以改变它然后.. 但每种方法看起来都像robot.MoveBox(25, ref myworldObject, ref myworldBoxes,ref etc etc)

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

1 个答案:

答案 0 :(得分: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!
    }
}