类参考快捷方式

时间:2014-01-22 14:36:27

标签: c# class

我目前在项目中有两个解决方案。 解决方案1是GameEngine 解决方案2基本上是前端冒险

为了从GameEngine库访问类,使用了Singleton设计方法,因此我可以访问我的库存类,例如使用GameEngine.Instance.Inventory。

然而,现在这里添加了很多代码,每次执行GameEngine.Instance,有没有办法可以调用方法或返回,所以我可以简单地引用Inventory,它将返回GameEngine.Instance.Inventory班而不是?基本上是捷径。

提前谢谢:)

5 个答案:

答案 0 :(得分:4)

一种方法是设置属性:

public GameEngine.Inventory Inventory
{
    get { return GameEngine.Instance.Inventory; }
}

现在,您可以在整个类中使用Inventory来引用您的单例对象。但是,这仅适用于特定类别。

另外,根据@Leri的评论,这种迁移(可能不会)影响性能。

答案 1 :(得分:3)

使用静态属性:

private static GameEngine.Inventory _inventory;
public static GameEngine.Inventory Inventory
{
  get { 
    if (_inventory == null) {
       _inventory = GameEngine.Instance.Inventory;
     } 

     return _inventory;
  }
}

答案 2 :(得分:1)

如果您的单例实例永远不会更改,您可以安全地为该实例使用变量:

var i = GameEngine.Instance;

然后用它:

i.Inventory

答案 3 :(得分:1)

您还可以添加静态方法,以便可以通过整个项目访问

public static ClsInventory GetInventory()
{
   return GameEngine.Instance.Inventory;
}

答案 4 :(得分:0)

我想补充答案。他们都正确地回答了你的问题,我全部投了赞成票。但是,我建议不要使用单例,而是尝试将您的aproach更改为注入依赖项以访问“全局”实例。

当您想要访问其他(全局)对象而不是库存时会发生什么?您必须向GameEngine添加另一个属性。您的引擎将成为Frankestain,其中有许多属性属于游戏引擎内部实例。这违反了单一的责任模式。

此外,当您想要对游戏进行单元测试时,您必须为每个测试/装置设置整个GameEngine。 IOD还可以帮助您解耦代码。