代码之家  ›  专栏  ›  技术社区  ›  luvieere

C 4.0的expandoobject是否支持基于原型的继承?

  •  13
  • luvieere  · 技术社区  · 15 年前

    C 4的吗? ExpandoObject 支持 Prototype-based inheritance ?如果不是,为什么不是(按设计?)如何实现这一点?如果是,它是如何工作的,与它在JavaScript中的工作方式相比有什么区别?

    1 回复  |  直到 11 年前
        1
  •  20
  •   Eric Lippert    15 年前

    C 4.0的expandoobject是否支持基于原型的继承?

    首先,请注意expandoobject类与C 4.0没有任何关系。C小组没有设计或实现这个对象。C 4.0和Expandoobject类只与最新版本的.NET一起提供。

    为了回答你的问题,我建议你 documentation 对于Expandoobject,它清楚地说明:

    ExpandooObject类是动态对象概念的实现,它支持获取、设置和调用成员。如果要定义具有自己的动态分派语义的类型,请使用dynamicObject类。

    如文档所述,如果您希望自定义分派语义高于仅仅调用成员,那么使用dynamicObject类。

    如果没有,为什么不呢?是设计出来的吗?

    有人可能想要一个Expando对象,但这个人可能既不想要也不需要原型继承。Expando对象在逻辑上不需要任何形式的继承。

    如何实现这一点?

    使用DynamicObject对象。编写自己的原型继承机制。

    如果是,它是如何工作的,并且它在JavaScript中的工作方式有什么区别?

    如果您试图编写与JScript完全相同的原型继承,我建议您阅读ECMAScript规范。 极其 仔细地。原型继承看起来很简单,但有一些微妙之处,大多数人都会出错。例如,即使是JScript专家也常常会弄错这个小问题。这个JScript代码打印什么?

    var Animal = new Object(); 
    function Reptile() { } 
    Reptile.prototype = Animal; 
    var lizard = new Reptile(); 
    print(lizard instanceof Reptile); // this is true
    print(lizard.constructor == Reptile);  // is this true or false? explain your answer!
    

    原型继承并不总是像您认为的那样工作!有关此打印内容和原因的解释,请参见 my article on the subject .