Información
El tema que ha solicitado se muestra abajo. Sin embargo, este tema no se encuentra en la biblioteca.

Compatibilidad de .NET Framework con las aplicaciones de la Tienda Windows y Windows en tiempo de ejecución

.NET Framework 4.5

.NET Framework 4.5 admite varios escenarios de desarrollo de software con Windows en tiempo de ejecución. Estos escenarios se clasifican en tres categorías:

En este tema se describe la compatibilidad que proporciona .NET Framework para las tres categorías y se describen los escenarios para los componentes de Windows en tiempo de ejecución. En la primera sección se incluye información básica sobre la relación entre .NET Framework y Windows en tiempo de ejecución, y se explican algunas singularidades que se pueden encontrar en el sistema de ayuda y el IDE. En la segunda sección se describen los escenarios para desarrollar componentes de Windows en tiempo de ejecución.

.NET Framework admite los tres escenarios de desarrollo indicados anteriormente proporcionando .NET para aplicaciones de la Tienda Windows y admitiendo el propio Windows en tiempo de ejecución.

  • .NET para aplicaciones de la Tienda Windows proporciona una vista simplificada de las bibliotecas de clases de .NET Framework y solo incluye los tipos y los miembros que se pueden usar para crear aplicaciones de la Tienda Windows y componentes de Windows en tiempo de ejecución.

    • Cuando se usa Visual Studio (Visual Studio 2012 o posterior) para desarrollar una aplicación de la Tienda Windows o un componente de Windows en tiempo de ejecución, un conjunto de ensamblados de referencia garantiza que solo se vean los tipos y miembros relevantes.

    • Este conjunto racionalizado de API se simplifica aún más mediante la supresión de las características duplicadas en .NET Framework o que duplican características de Windows en tiempo de ejecución. Por ejemplo, solo contiene las versiones genéricas de los tipos de colección, y se ha eliminado el modelo de objetos de documento XML a favor del conjunto de API de XML de Windows en tiempo de ejecución.

    • También se han eliminado las características que simplemente encapsulan la API del sistema operativo, porque resulta sencillo llamar a Windows en tiempo de ejecución desde el código administrado.

    Para obtener más información sobre .NET para aplicaciones de la Tienda Windows, vea Información general de .NET para aplicaciones de la Tienda Windows en el Centro de desarrollo de Windows. Para obtener más información sobre el proceso de selección de la API, vea la entrada sobre .NET para aplicaciones de la Tienda Windows en el blog de .NET.

  • Windows en tiempo de ejecución proporciona los elementos de la interfaz de usuario para crear aplicaciones de la Tienda Windows, y proporciona acceso a las características del sistema operativo. Al igual que .NET Framework, Windows en tiempo de ejecución tiene metadatos que permiten a los compiladores de C# y de Visual Basic usar Windows en tiempo de ejecución de la misma forma en que usan las bibliotecas de clases de .NET Framework. .NET Framework hace que resulte mas fácil de utilizar Windows en tiempo de ejecución ocultando algunas diferencias:

    • Algunas diferencias en los patrones de programación entre .NET Framework y Windows en tiempo de ejecución, como el patrón para agregar y quitar controladores de eventos, están ocultas. Simplemente se usa el patrón de .NET Framework.

    • Algunas diferencias de tipos de uso general (por ejemplo, los tipos primitivos y las colecciones) están ocultas. Simplemente se usa el tipo de .NET Framework, como se describe en Diferencias que son visibles en el IDE, más adelante en este artículo.

Nota Nota

Para obtener más información sobre la manera en que .NET Framework usa los metadatos de Windows para simplificar la programación con Windows en tiempo de ejecución, descargue las notas del producto sobre el CLR y Windows en tiempo de ejecución desde el Centro de desarrollo de Windows.

La mayoría de las veces, la compatibilidad de .NET Framework Windows en tiempo de ejecución es transparente. En la sección siguiente se describen algunas de las diferencias aparentes entre el código administrado y Windows en tiempo de ejecución.

Hh694558.collapse_all(es-es,VS.110).gif.NET Framework y la documentación de referencia de Windows en tiempo de ejecución

Los conjuntos de documentación de Windows y de .NET Framework son independientes. Si presiona F1 para mostrar la ayuda sobre un tipo o miembro, se muestra la documentación de referencia del conjunto correspondiente. Sin embargo, si examina la Referencia de Windows en tiempo de ejecución, podría encontrar ejemplos que parecen desconcertantes:

  • Algunos temas, como el de la Interfaz IIterable no tienen sintaxis de declaración para Visual Basic o C#. En su lugar, aparece una nota por encima de la sección de sintaxis (en este caso, ".NET: Esta interfaz aparece como System.Collections.Generic.IEnumerable<T>"). Esto se debe a que .NET Framework y Windows en tiempo de ejecución proporcionan una funcionalidad similar con distintas interfaces. Además, hay diferencias de comportamiento: IIterable tiene un método First en lugar de un método GetEnumerator para devolver el enumerador. En lugar de obligarle a que aprenda a realizar una tarea común de una manera diferente, .NET Framework admite Windows en tiempo de ejecución haciendo que parezca que su código administrado usa el tipo con el que está familiarizado. No verá la interfaz IIterable en el IDE, por lo que la única forma en que la encontrará en la documentación de referencia de Windows en tiempo de ejecución será cuando examine dicha documentación directamente.

  • En la documentación del Constructor SyndicationFeed se aprecia un problema bastante parecido: sus tipos de parámetros parecen distintos para los distintos idiomas. Para C# y Visual Basic, los tipos de parámetros son System.String y System.Uri. Esto también se debe a que .NET Framework tiene sus propios tipos String y Uri, y para esos tipos de uso tan general no tiene sentido obligar a los usuarios de .NET Framework a aprender una forma distinta de hacer las cosas. En el IDE, .NET Framework oculta los tipos correspondientes de Windows en tiempo de ejecución.

  • En algunos casos, como el de la estructura Windows.UI.Xaml.GridLength, .NET Framework proporciona un tipo con el mismo nombre pero con más funcionalidad. Por ejemplo, existe un conjunto de temas sobre constructores y propiedades relacionados con GridLength, pero solo tienen bloques de sintaxis para Visual Basic y C# porque los miembros solo están disponibles en el código administrado. En Windows en tiempo de ejecución, las estructuras solo tienen campos. La estructura de Windows en tiempo de ejecución requiere una clase auxiliar, Windows.UI.Xaml.GridLengthHelper, para proporcionar una funcionalidad equivalente. No verá esa clase auxiliar en el IDE cuando escriba código administrado.

  • En el IDE, los tipos de Windows en tiempo de ejecución aparentemente se derivan de System.Object. Parece que tienen miembros heredados de Object, como Object.ToString. Estos miembros funcionan como lo harían si los tipos heredaran realmente de Object, y los tipos de Windows en tiempo de ejecución pueden convertirse en Object. Esta funcionalidad forma parte de la compatibilidad que proporciona .NET Framework para Windows en tiempo de ejecución. Sin embargo, si se consultan los tipos en la documentación de referencia de Windows en tiempo de ejecución, dichos miembros no aparecen. La documentación para estos miembros aparentemente heredados se proporciona en la documentación de referencia de System.Object.

Hh694558.collapse_all(es-es,VS.110).gifDiferencias que son visibles en el IDE

En escenarios de programación más avanzados, como cuando se usa un componente de Windows en tiempo de ejecución escrito en C# para proporcionar la lógica de la aplicación para una aplicación de la Tienda Windows compilada para Windows mediante JavaScript, tales diferencias son evidentes tanto en el IDE como en la documentación. Cuando el componente devuelve una interfaz IDictionary<int, string> a JavaScript, si la examina en el depurador de JavaScript, verá los métodos de la interfaz IMap<int, string> porque JavaScript usa el tipo de Windows en tiempo de ejecución. Algunos tipos de colecciones de uso general que aparecen de manera diferente en los dos lenguajes se muestran en la tabla siguiente:

Tipo de Windows en tiempo de ejecución

Tipo correspondiente de .NET Framework

IIterable<T>

IEnumerable<T>

IIterator<T>

IEnumerator<T>

IVector<T>

IList<T>

IVectorView<T>

IReadOnlyList<T>

IMap<K, V>

IDictionary<TKey, TValue>

IMapView<K, V>

IReadOnlyDictionary<TKey, TValue>

IBindableIterable

IEnumerable

IBindableVector

IList

Windows.UI.Xaml.Data.INotifyPropertyChanged

System.ComponentModel.INotifyPropertyChanged

Windows.UI.Xaml.Data.PropertyChangedEventHandler

System.ComponentModel.PropertyChangedEventHandler

Windows.UI.Xaml.Data.PropertyChangedEventArgs

System.ComponentModel.PropertyChangedEventArgs

En Windows en tiempo de ejecución, IMap<K, V> e IMapView<K, V> se recorren en iteración mediante IKeyValuePair. Cuándo se pasan al código administrado, aparecen como IDictionary<TKey, TValue> e IReadOnlyDictionary<TKey, TValue>, por lo que naturalmente se usa System.Collections.Generic.KeyValuePair<TKey, TValue> para enumerarlas.

La forma en que aparecen las interfaces en el código administrado afecta a la forma en que aparecen los tipos que implementan estas interfaces. Por ejemplo, la clase PropertySet implementa IMap<K, V>, que aparece en el código administrado como IDictionary<TKey, TValue>. PropertySet aparece como si implementara IDictionary<TKey, TValue> en lugar de IMap<K, V>, por lo que en el código administrado parece que tiene un método Add, que se comporta como el método Add en los diccionarios de .NET Framework. No parece que tenga un método Insert.

Para obtener más información sobre cómo usar .NET Framework para crear un componente de Windows en tiempo de ejecución y un tutorial que muestra cómo usar este componente con JavaScript, vea Crear componentes de Windows en tiempo de ejecución en C# y Visual Basic en el Centro de desarrollo de Windows.

Hh694558.collapse_all(es-es,VS.110).gifTipos primitivos

Para habilitar el uso natural de Windows en tiempo de ejecución en el código administrado, en el código aparecen los tipos primitivos de .NET Framework en lugar de los tipos primitivos de Windows en tiempo de ejecución. En .NET Framework, los tipos primitivos como la estructura Int32 tienen muchas propiedades y métodos útiles, como el método Int32.TryParse. Por el contrario, los tipos primitivos y las estructuras de Windows en tiempo de ejecución solo tienen campos. Cuando se usan primitivas en el código administrado, aparecen como si fueran tipos de .NET Framework, y se pueden usar las propiedades y métodos de los tipos de .NET Framework como se haría normalmente. La lista siguiente contiene un resumen:

  • Para las primitivas de Windows en tiempo de ejecución Int32, Int64, Single, Double, Boolean, String (una colección inmutable de caracteres Unicode), Enum, UInt32, UInt64 y Guid, use el tipo del mismo nombre en el espacio de nombres System.

  • Para UInt8, use System.Byte.

  • Para Char16, use System.Char.

  • Para la interfaz IInspectable, use System.Object.

  • Para HRESULT, use una estructura con un miembro System.Int32.

Como ocurre con los tipos de interfaz, la única ocasión en que puede ver una evidencia de esta representación es cuando el proyecto de .NET Framework es un componente de Windows en tiempo de ejecución utilizado por una aplicación de la Tienda Windows creada con JavaScript.

Otros tipos básicos de Windows en tiempo de ejecución que se usan con frecuencia y que aparecen en el código administrado como sus equivalentes de .NET Framework incluyen la estructura Windows.Foundation.DateTime, que aparece en el código administrado como la estructura System.DateTimeOffset, y la estructura Windows.Foundation.TimeSpan, que aparece como la estructura System.TimeSpan.

Hh694558.collapse_all(es-es,VS.110).gifOtras diferencias

En algunos casos, deberá realizar alguna acción para que aparezcan en el código los tipos de .NET Framework en lugar de los tipos de Windows en tiempo de ejecución. Por ejemplo, la clase Windows.Foundation.Uri aparece como System.Uri en el código de .NET Framework. System.Uri permite un URI relativo, pero Windows.Foundation.Uri requiere un URI absoluto. Por consiguiente, cuando pase un URI a un método de Windows en tiempo de ejecución, debe asegurarse de que sea absoluto. (Vea Pasar un URI a Windows en tiempo de ejecución.)

Los escenarios que se admiten para los componentes administrados de Windows en tiempo de ejecución dependen de los principios generales siguientes:

  • Los componentes de Windows en tiempo de ejecución creados con .NET Framework no tienen ninguna diferencia aparente de otras bibliotecas de Windows en tiempo de ejecución. Por ejemplo, si vuelve a implementar un componente nativo de Windows en tiempo de ejecución mediante código administrado, en apariencia no existe ninguna diferencia entre los dos componentes. El hecho de que un componente esté escrito en código administrado es invisible para el código que lo utiliza, incluso si dicho código también es código administrado. Sin embargo, internamente, el componente es código administrado auténtico y se ejecuta en Common Language Runtime (CLR).

  • Los componentes pueden contener tipos que implementan la lógica de la aplicación, controles de la interfaz de usuario de la Tienda Windows o ambos.

    Nota Nota

    Es recomendable separar los elementos de la interfaz de usuario de la lógica de la aplicación. Además, no se pueden usar controles de la interfaz de usuario de la Tienda Windows en una aplicación de la Tienda Windows creada para Windows mediante JavaScript y HTML.

  • Un componente puede ser un proyecto de una solución de Visual Studio para una aplicación de la Tienda Windows o un componente reutilizable que se puede agregar a varias soluciones.

    Nota Nota

    Si un componente solo se va a usar con C# o Visual Basic, no hay ninguna razón para convertirlo en un componente de Windows en tiempo de ejecución. Si en lugar de ello se crea una biblioteca de clases de .NET Framework ordinaria, no será necesario restringir la superficie de la API pública a los tipos de Windows en tiempo de ejecución.

  • Se pueden liberar versiones de los componentes reutilizables mediante el uso del atributo Windows en tiempo de ejecución VersionAttribute para identificar qué tipos (y qué miembros dentro de un tipo) se agregaron en las distintas versiones.

  • Los tipos del componente se pueden derivar de los tipos de Windows en tiempo de ejecución. Los controles pueden derivarse de los tipos de controles primitivos del espacio de nombres Windows.UI.Xaml.Controls.Primitives o de controles más acabados como Button.

    Nota importante Importante

    A partir de Windows 8 y de .NET Framework 4.5, todos los tipos públicos de un componente administrado de Windows en tiempo de ejecución deben ser sealed. Un tipo de otro componente de Windows en tiempo de ejecución no puede derivarse de ellos. Si se desea proporcionar un comportamiento polimórfico a un componente, puede crear una interfaz e implementarla en los tipos polimórficos.

  • Todos los parámetros y tipos devueltos de los tipos públicos del componente deben ser tipos de Windows en tiempo de ejecución (incluidos los tipos de Windows en tiempo de ejecución definidos por el componente).

En las secciones siguientes se proporcionan ejemplos de escenarios comunes.

Hh694558.collapse_all(es-es,VS.110).gifLógica de aplicación para una aplicación de la Tienda Windows con JavaScript

Al desarrollar una aplicación de la Tienda Windows para Windows mediante JavaScript, puede que algunas partes de la lógica de la aplicación funcionen mejor en código administrado, o que sean más fáciles de desarrollar. JavaScript no puede utilizar las bibliotecas de clases de .NET Framework directamente, pero puede convertir la biblioteca de clases en un archivo .WinMD. En este escenario, el componente de Windows en tiempo de ejecución es una parte integral de la aplicación, por lo que no tiene sentido proporcionar atributos de versión.

Hh694558.collapse_all(es-es,VS.110).gifControles reutilizables de la interfaz de usuario de la Tienda Windows

Se puede empaquetar un conjunto de controles relacionados de la interfaz de usuario en un componente reutilizable de Windows en tiempo de ejecución. El componente se puede comercializar por separado o usarse como elemento de las aplicaciones que se creen. En este escenario, tiene sentido utilizar el atributo VersionAttribute de Windows en tiempo de ejecución para mejorar la compatibilidad.

Hh694558.collapse_all(es-es,VS.110).gifLógica de aplicación reutilizable de aplicaciones existentes de .NET Framework

Se puede empaquetar código administrado de aplicaciones de escritorio existentes como un componente independiente de Windows en tiempo de ejecución. Esto permite usar el componente en las aplicaciones de la Tienda Windows creadas con C++ o JavaScript, así como en las aplicaciones de la Tienda Windows creadas con C# o Visual Basic. El control de versiones es una opción si existen varios escenarios de reutilización para el código.

Título

Descripción

Información general de .NET para aplicaciones de la Tienda Windows

Describe los tipos y miembros de .NET Framework que se pueden usar para crear aplicaciones de la Tienda Windows y componentes de Windows en tiempo de ejecución. (En el Centro de desarrollo de Windows).

Guía básica para crear aplicaciones de la Tienda Windows con C# o Visual Basic

Proporciona recursos clave para ayudarle a empezar a desarrollar aplicaciones de la Tienda Windows mediante C# o Visual Basic, e incluye numerosos tutoriales rápidos, directrices y procedimientos recomendados. (En el Centro de desarrollo de Windows).

Desarrollar aplicaciones de la Tienda Windows (VB/C#/C++ y XAML)

Proporciona recursos clave para ayudarle a empezar a desarrollar aplicaciones de la Tienda Windows mediante C# o Visual Basic, e incluye numerosos tutoriales rápidos, directrices y procedimientos recomendados. (En el Centro de desarrollo de Windows).

Crear componentes de Windows en tiempo de ejecución en C# y Visual Basic

Describe cómo crear un componente de Windows en tiempo de ejecución mediante .NET Framework, explica cómo usarlo como parte de una aplicación de la Tienda Windows creada para Windows mediante JavaScript y describe cómo depurar la combinación con Visual Studio. (En el Centro de desarrollo de Windows).

Referencia de Windows en tiempo de ejecución

Documentación de referencia para Windows en tiempo de ejecución. (En el Centro de desarrollo de Windows).

Pasar un URI a Windows en tiempo de ejecución

Describe un problema que puede surgir cuando se pasa un URI desde el código administrado a Windows en tiempo de ejecución y cómo evitarlo.

Adiciones de comunidad

Mostrar:
© 2014 Microsoft. Reservados todos los derechos.