2014-01-16 37 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