【问题标题】:Accessing an array without static references in another class (OOP)访问另一个类中没有静态引用的数组 (OOP)
【发布时间】:2015-08-14 19:44:10
【问题描述】:

我是面向对象编程的新手,我为自己当前的项目设定了一个严格的目标,该项目不使用静态变量。在此过程中,我将尝试了解 OOP。

我正在使用 Haxe 语言,它是我见过的最好的语言之一。

我对 C 指针有点了解,指针只存储变量的地址,所以它几乎是相同的变量,只是占用的空间更少(尤其是对于大变量)。

现在回到现在,我想要一个指向一个类的对象数组的指针引用,因为

  • 我希望这些对象能够相互交互,
  • 我不想有任何静态引用,
  • 我不想让每个对象都持有该数组的副本。

我应该如何访问这个数组? 还是有另一种 OOP 设计模式之类的?

如有错误请指正。

【问题讨论】:

  • 我不确定您对指针的处理是否像您想象的那样牢固。指针不会占用更少的空间,它是一种引用内存的不同方式。如果你有一个字符串,例如,无论你对它的引用是指针还是静态变量,字符串占用的空间都是一样的。

标签: arrays oop pointers haxe


【解决方案1】:

这个简报中有很多问题。

你可以在所有变量中传递一个上下文,它将通过指针传递

class Context{
    var level:Level=null;
    var enemies:Array<Enemy>=[];
}

class Enemy{
    var ctx:Context;
    function new(ctx){ this.ctx=ctx; }
}

class Main{
    static function main(){
        new Game(new Context());
    }
}

在游戏中,将上下文传递给每个人:

new Enemy(ctx);

等等……

坦率地说,在上下文中使用静态通常更容易,例如

class Context{
    static var level:Level;
}

但这取决于你:)

顺便说一句,所有非基元都是指向结构(例如数组)的指针,就像 java 一样。

【讨论】:

  • 好的,所以'Context'类是一个存储所有游戏变量的类,游戏中的任何对象都应该通过传递过来的'Context'访问变量,对吧?跨度>
  • 就是这样。游戏数据存储本质上是非常静态的。您也可以使用拆分上下文,但这取决于您的游戏有多大。
猜你喜欢
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 2012-08-23
相关资源
最近更新 更多