2014-01-16 36 views
0

所以基本上我有这样的:如何在不同类之间共享对象?

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

,其中一项是类做一些东西(现在我只是给它一个名称属性) 现在我应该怎么做,如果我想使用内部的任何新gameobjects我创建的未来班级?

也作为侧面的问题是这样做的不好的做法?

+0

如果'future'类('F')需要对'A'类型的对象'a'的引用,则为'F'创建一个具有'A'的构造函数。如果F不需要它(即它是可选的),那么使用属性设置方法来执行它。看看工厂模式,选择适合您需求的模式。 –

回答

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); 
    } 
} 
+0

是的,这会工作,但这是有效的?我的意思是每次传递参数是处理它的常用方法?在许多情况下,你不需要通过但只是操作它们,这不是一个马虎的机制?例如 例如可以说我想绘制或删除它们全部,我不想将gameObjects传递给另一个类,我只想创建一个循环到gameObjects.lenght的类并设置一些参数或调用其他方法绘制/操纵其中的每一个 – user3161621

+0

我不太了解你的评论,但在上面的例子中,它只是传递一个数组指针。没有太多需要担心的表现。如果您不想在类中存储对数组的引用,那么只需创建方法以使用对数组的操作。 –

+0

sry我正在编辑 – user3161621

0

创建您的项目类中的属性和通过属性分配呢?至于侧面的问题,我会看性能,它取决于你在做什么,所以你可以运行一些负载测试,看看它是否有效或不。

0

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

这可能是移动信息的最有效方式,效率更高只是使其成为公共静态字段,这会使其成为更大的维护噩梦。所以,不仅要考虑传递东西的性能成本,反而应该尽可能地集中隐藏东西。

您应该从一个类定义您需要哪些信息,并通过接口进行编程。你需要从你的Game1课程获得这些信息吗?这些数据是否应该封装到不同的类中?

您的Game1类是否真的需要实例化这些项目?还是应该在外部实例化,然后传递给Game1和其他类?

+0

好thnx所有的答案,我想我明白了 – user3161621