Dado algunos de los comentarios, déjenme proporcionar una respuesta alternativa. La pregunta original preguntaba por qué XmlDocument no era dinámico en .NET 4. Si bien es posible agregar la capacidad de propiedad "expando" a las clases de documento xml existentes a través del IDynamicMetaObjectProvider
, hacerlo probablemente no sea una tarea trivial. Hacer que el modelo original de objetos Xml de System.Xml sea completamente dinámico requeriría algunas modificaciones extensas del marco Xml, y requeriría que IDynamicMetaObjectProvider se agregue a cada objeto involucrado. Eso incluye XmlDocument, XmlElement, XmlAttribute, XmlNode y todos los otros tipos de contenido xml, como comentarios, nodos de texto, etc. Además, una cantidad considerable de infraestructura de soporte, tipos internos, etc. que están involucrados en la búsqueda y el procesamiento de los elementos y atributos y valores también deberían modificarse (abrir Reflector y echar un vistazo a System.Xml ... más de la mitad de los tipos son internos, y todos son altamente interdependientes entre sí y con los tipos públicos disponibles) .)
También es importante considerar el alcance adecuado de la implementación de las propiedades de expansión de Xml en .NET. ¿Se detendría solo en XmlDocument y tipos relacionados? ¿O sería más apropiado incluir XPath, Xml Schema, etc.?
Para responder a la pregunta original "¿Por qué XmlDocument no es dinámico en .NET 4?", Creo que la respuesta simple es: Implementar API completamente "dinámicas", o en el caso de Xml aquí, API que proporcionan la expansión de propiedades de documentos xml arbitrarios, está lejos de ser una tarea trivial. Dada la ética de trabajo de Microsoft, tiene sentido lógico que no aborden esa tarea a la ligera, y si intentan implementar propiedades de expansión para el marco Xml, espero y espero que se haga con el mismo nivel de atención y cuidado cuidadosos. dan al resto de .NET.
Si se cambiara cualquier tipo, sería XDocument, no XmlDocument. –
Además, ¿la respuesta a esta pregunta es específica para C#? –
AFAIK, 'dynamic' es una característica de C#, así que sí, específica para C#. – svick