¿Tiene C# 4.0 ExpandoObject compatible con Prototype-based inheritance? 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?¿ExpandoObject de C# 4.0 admite la herencia basada en prototipos?
Respuesta
¿El 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 le remito a la documentation para ExpandoObject, que establece claramente:
clase El ExpandoObject es una implementación del concepto de objeto dinámico que permite conseguir, el escenario y la invocación de los miembros. Si desea definir tipos que tengan su propia semántica de despacho dinámico, use la clase DynamicObject.
Como dice la documentación, si desea una semántica de despacho personalizado por encima de la mera invocación de miembros, utilice la clase DynamicObject.
Si no, ¿por qué 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?
Utilice el objeto DynamicObject. Escribe tu propio mecanismo de herencia prototipo.
En caso afirmativo, ¿cómo funciona y las diferencias existen en la forma en que funciona en Javascript?
Si está intentando escribir su propia herencia de prototipo que es exactamente igual que JScript de, os animo a leer la especificación ECMAScript muy cuidadosamente. 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 usted cree! Para una explicación de lo que esto imprime y por qué, vea my article on the subject.
- 1. Buen ejemplo de la herencia basada en prototipos de JavaScript
- 2. JavaScript herencia funcional con prototipos
- 3. C# 4.0: ¿Por qué MethodBag cuando hay ExpandoObject?
- 4. ¿Maven admite la herencia de propiedades?
- 5. herencia de prototipos en PHP (como en JavaScript)
- 6. Herencia de estilo basada en XAML diferente
- 7. Propósito de C/C Prototipos ++
- 8. ¿ActiveMerchant admite transacción basada en suscripción?
- 9. Problema de herencia de Javascript al usar prototipos - instancias sobreescritas :(
- 10. ¿Por qué se implementó JavaScript usando herencia de prototipos?
- 11. ¿Cómo hago JavaScript Prototype Herencia (cadena de prototipos)
- 12. Extracción de C/C++ prototipos de funciones
- 13. C# 4.0 Dinámico vs Expando ... ¿dónde encajan?
- 14. Creación de prototipos Qt/C++ en Python
- 15. ¿Por qué utilizar la herencia de estilo OOP basada en clase en javascript?
- 16. ¿Admite Salesforce Apex la herencia de métodos estáticos?
- 17. ¿Qué patrones puedes usar con la herencia de prototipos que no puedes con la clase?
- 18. prototipos versus clases
- 19. ctags prototipos de función C multilínea
- 20. herencia de la secuencia en C++
- 21. Prevenir la herencia de clases en C++
- 22. Analizador de configuración de Python que admite herencia de sección?
- 23. ¿Herencia privada en C#?
- 24. Variables privadas en prototipos heredados
- 25. ¿mvc admite la herencia de la configuración de Web.config en todas las áreas?
- 26. Herencia única en C# - ¿clase de objeto?
- 27. Orientación de objetos basada en prototipos. ¿Lo bueno, lo malo y lo feo?
- 28. Herencia múltiple en C#
- 29. Herencia en C++
- 30. Costos herencia en C++
Interesante pregunta. Supongo que el mayor problema que puedo pensar es en los métodos de instancia. Si tiene alguno, ¿cómo puede hacer referencia a 'this'? Someras-Copiar todas las propiedades debería ser lo suficientemente fácil, pero creo que su pregunta es más amplia que eso. ¿Por qué necesitarías esto, por cierto? ¿Interés académico? – Kobi
Interés general, más que académico ... Al ver la orientación recién descubierta de C# hacia el tipado dinámico en su versión 4.0, la pregunta surgió en mi mente en cuanto a qué tan lejos tomaron esto. La herencia basada en el prototipo es, después de todo, una característica de algunos lenguajes de tipo dinámico. – luvieere