【问题标题】:Prefered way to reference super classes (typed languages)引用超类的首选方式(类型化语言)
【发布时间】:2012-06-05 04:24:55
【问题描述】:

这个问题实际上出现了不少。以这个实例模型视图为例。我有 2 个对象。模拟对象和渲染对象。

ObjectRSim 类(Object,指定为 Render Sim)类似于:

class ObjectRSsim {
   var simObject:ObjectSim;
}

ObjectRSim,使用 ObjectSim 的属性/失效。

有继承ObjectRSim和ObjectSim的对象:

PosObjectRSim 和 PosObjectSim(位置对象..)

class PosObjectRSim extends ObjectRSim {
   var posSimObject:PosObjectSim;
}

或者...

class ObjectRSim {
   var simObject:Dynamic; //Dynamic is untyped Type from haxe, the compiler does not check calls to a Dynamic object. 
}

我应该在 ObjectRSim 层次类中引用 ObjectSim 的继承层次中的每个类型,还是应该只使用 simObject:Dynamic?

【问题讨论】:

  • 因为 java 和 c++ 是最常用的具有参数化的类型语言,这适用于用它们编写的应用程序。
  • 但是这种语法在 Java 或 C++ 中不起作用,它们已经有自己的语法来引用基类。
  • 那是伪代码。这个问题对于类型化语言来说是普遍的。无论如何,答案是多个引用或依赖项的参数化。

标签: java c++ haxe


【解决方案1】:

在这种情况下使用 Dynamic 是完全错误的。它通常很慢(我猜除了 javascript 之外的每个 haxe 目标),没有内联,通常仅用于与底层平台交互或使用序列化(YAML、JSON 等)。

谈论解决问题...

如果没有计划数千个这样的对象,我可能只是低级类对象的另一个字段。从 OOP 的角度来看,这不是最清晰的方法,但它经常会为我带来更简单、更清晰的代码。

铸造是另一种选择(我个人不喜欢)。

参数化可能是最好的处理方式,但我不确定我们是否已经在 haxe 中进行了类型限制参数化。

【讨论】:

  • 是的,我们现在肯定有类型限制参数化。
【解决方案2】:

参数化依赖类和依赖成员。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2023-03-11
    • 2010-09-07
    • 2018-06-15
    • 2018-10-23
    • 2011-08-29
    相关资源
    最近更新 更多