property example dynamically create c# c#-4.0 prototypal-inheritance expandoobject

example - ¿ExpandoObject de C#4.0 admite la herencia basada en prototipos?



expandoobject c# example (1)

¿ExpandoObject de C # 4.0 admite la herencia basada en prototipos?

En primer lugar, tenga en cuenta que la clase ExpandoObject no tiene nada que ver con C # 4.0. El equipo de C # no diseñó ni implementó este objeto. C # 4.0 y la clase ExpandoObject simplemente llegan a ambos con la última versión de .NET.

Para responder a su pregunta, lo remito a la documentación de ExpandoObject, que establece claramente:

La clase ExpandoObject es una implementación del concepto de objeto dinámico que permite obtener, configurar e invocar miembros. Si desea definir tipos que tengan su propia semántica de despacho dinámico, use la clase DynamicObject.

Tal como lo indica la documentación, si desea una semántica de despacho personalizada por encima de la mera invocación de miembros, utilice la clase DynamicObject.

¿Si no, porque no? ¿fue por diseño?

Alguien podría querer un objeto de expansión, pero esa persona podría no querer ni necesitar una herencia de prototipo. Los objetos Expando no requieren lógicamente ninguna forma de herencia.

¿Cómo podría implementarse esto?

Use el objeto DynamicObject. Escribe tu propio mecanismo de herencia prototipo.

En caso afirmativo, ¿cómo funciona y existen diferencias en la forma en que funciona en Javascript?

Si está intentando escribir su propia herencia de prototipo que es exactamente como la de JScript, lo animo a leer la especificación ECMAScript con extremo cuidado. La herencia del prototipo parece simple, pero hay sutilezas que la mayoría de las personas se equivocan. Por ejemplo, incluso los expertos de JScript suelen equivocarse con este pequeño acertijo. ¿Qué imprime este código 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!

¡La herencia de prototipos no siempre funciona de la manera que crees! Para una explicación de lo que esto imprime y por qué, vea mi artículo sobre el tema .

¿ ExpandoObject de C # 4.0 admite la herencia basada en prototipos ? Si no, ¿por qué no (fue por diseño?) Y ¿cómo podría implementarse? En caso afirmativo, ¿cómo funciona y qué diferencias existen en comparación con la forma en que funciona en Javascript?