如何在不同的类之间共享对象?

时间:2014-01-16 11:57:56

标签: c#

基本上我有这个:

namespace ciao
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        public Item[] gameObjects = new Item[5];
    }
}

其中item是一个做一些事情的类(现在我给它一个名字属性) 现在如果我想在我创建的任何新的未来类中使用gameobjects,我该怎么办?

这也是一个不好的做法,这样做是不好的做法?

3 个答案:

答案 0 :(得分:1)

根据我的理解,您希望将gameObjects数组作为参数传递给新类。

您可以创建一个类,其构造函数具有接受Item数组的参数,就像这样。请注意,这不是实现您所要求的唯一方法。

public class MyClass
{
    private Item[] gameObjects;

    public MyClass(Item[] gameObjects)
    {
        this.gameObjects = gameObjects
    }
}

现在,您可以在该类的未来操作中引用gameObjects数组。

从你的例子:

namespace ciao
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        public Item[] gameObjects = new Item[5];

        MyClass myClass = new MyClass(gameObjects);
    }
}

答案 1 :(得分:0)

在Item类中创建属性并通过属性分配它们?

至于方面的问题,我会看一下性能,它取决于你在做什么,所以你可以运行一些负载测试,看看它是否有效。

答案 2 :(得分:0)

OOP view开始,暴露公共字段是件坏事,因为任何外部代码都可以使gameObjects指向不同的数组实例。暴露可变对象更糟糕,因为任何外部代码都可以修改数组的内容。

这可能是最有效的信息传递方式,更有效的方法只是使其成为一个公共静态字段,这将使它成为一个比这更大的维护噩梦。所以,不仅你不应该考虑传递东西的性能成本,你应该尽可能地集中精力隐藏东西。

首先应该从一个类中定义所需的信息,然后通过接口进行编程。您是否需要Game1课程中的这些信息?这些数据应该封装在不同的类中吗?

你的Game1课真的需要实例化这些项目吗?或者它们应该在外部实例化,然后传递给Game1和其他类?