基本上我有这个:
namespace ciao
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
public Item[] gameObjects = new Item[5];
}
}
其中item是一个做一些事情的类(现在我给它一个名字属性) 现在如果我想在我创建的任何新的未来类中使用gameobjects,我该怎么办?
这也是一个不好的做法,这样做是不好的做法?
答案 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
和其他类?