2012-05-08 9 views

Respuesta

4

Esto es una limitación arquitectónica, impuesta por COM. Que se encuentra en el núcleo de cualquier tipo de WinRT, se derivan de IUnknown e IInspectable. El problema con COM es que solo admite la herencia de interfaz pero no la herencia de implementación. Lo cual fue un fuerte objetivo de diseño de COM, la herencia de implementación está demasiado llena de detalles de implementación, incluido el infame problema de los diamantes.

Hay una manera de hacer que la herencia trabaje por delegación, cada método en la clase derivada llama explícitamente al método de interfaz base correspondiente, pero es muy doloroso hacerlo usted mismo. Pero por lo demás, la forma en que las clases de Windows.UI.Xaml implementan la herencia.

+0

Eso responde la pregunta. gracias especiales por mencionar el problema del diamante – Tilak

+1

No es del todo exacto, es posible implementar clases winrt sin sellar, pero no se pueden consumir desde JavaScript y requieren el uso de la experiencia de creación de bajo nivel (IDL), lo que puede ser todo un reto desde Visual Studio. Además, todas las clases derivadas (selladas o no) DEBEN derivarse de las clases en el espacio de nombres de Windows. –

+0

¿Puede indicar alguna documentación de respaldo? Me gustaría ver, ¿cómo se puede hacer eso? En mi caso, lo necesito todo dentro de VS, pero valdría la pena saber cómo van las cosas en el fondo – Tilak

1

Creo que la razón es porque los tipos expuestos deben ser utilizables desde todos los tipos de idiomas (C#, C++, JavaScript tal vez más en el futuro).

Así que si tienes una clase, una de las clases que está utilizando se está reemplazando por una nueva clase. Podría querer superar la clase, eso se hace en otro idioma. Pero esto es un problema ¿Cómo desea anular una clase base realizada en C#, por clase de herencia hecha en C++? Esto nunca puede funcionar, porque ambos tienen implementaciones de OOP completamente diferentes e incompatibles.

Al forzar el sellado de las clases expuestas, elimina este problema y se asegura de que las personas no intenten hacer algo como esto.

Estoy seguro de que hay cosas mucho más fundamentales que esto, pero esto es lo que primero me vino a la mente.

Cuestiones relacionadas