luv*_*ere 13 c# prototypal-inheritance expandoobject c#-4.0
C#4.0的ExpandoObject是否支持基于Prototype的继承?如果没有,为什么不(它是否按设计?)以及如何实施?如果是,它是如何工作的,与它在Javascript中的工作方式相比有什么不同?
Eri*_*ert 21
C#4.0的ExpandoObject是否支持基于Prototype的继承?
首先,请注意ExpandoObject类与C#4.0没有任何关系.C#团队没有设计或实现这个对象.C#4.0和ExpandoObject类只发生在最新版本的.NET上.
为了回答您的问题,我向您推荐ExpandoObject 的文档,其中明确指出:
ExpandoObject类是动态对象概念的实现,它允许获取,设置和调用成员.如果要定义具有自己的动态分派语义的类型,请使用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!
Run Code Online (Sandbox Code Playgroud)
原型继承并不总是像你想象的那样工作!有关这些内容及其原因的解释,请参阅我关于此主题的文章.
| 归档时间: |
|
| 查看次数: |
1496 次 |
| 最近记录: |