Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A partir de .NET Framework 4.5, .NET Framework incluye un conjunto de tipos y miembros de reflexión para su uso en aplicaciones de la Tienda Windows 8.x. Estos tipos y miembros están disponibles en la versión completa de .NET Framework, así como en las aplicaciones .NET para la Tienda Windows. En este documento se explican las principales diferencias entre estos y sus homólogos en .NET Framework 4 y versiones anteriores.
Si va a crear una aplicación de la Tienda Windows 8.x, debe usar los tipos y miembros de reflexión de las aplicaciones .NET para la Tienda Windows 8.x. Estos tipos y miembros también están disponibles, pero no necesarios, para su uso en aplicaciones de escritorio, por lo que puede usar el mismo código para ambos tipos de aplicaciones.
TypeInfo y carga de ensamblados
En las aplicaciones de la Tienda .NET para Windows 8.x, la TypeInfo clase contiene parte de la funcionalidad de la clase .NET Framework 4 Type . Un Type objeto representa una referencia a una definición de tipo, mientras que un TypeInfo objeto representa la propia definición de tipo. Esto le permite manipular Type objetos sin requerir necesariamente el tiempo de ejecución para cargar el ensamblado al que hacen referencia. Al obtener el objeto TypeInfo asociado se fuerza la carga del ensamblado.
TypeInfo contiene muchos de los miembros disponibles en Type, y muchas de las propiedades de reflexión de las aplicaciones .NET para la Tienda Windows 8.x devuelven colecciones de objetos TypeInfo. Para obtener un TypeInfo objeto de un Type objeto , use el GetTypeInfo método .
Métodos de consulta
En las aplicaciones .NET para la Tienda Windows 8.x, use las propiedades de reflexión que devuelven colecciones de IEnumerable<T> en lugar de los métodos que devuelven matrices. Los contextos de reflexión pueden implementar el recorrido diferido de estas colecciones para los ensamblados o tipos de gran tamaño.
Las propiedades de reflexión devuelven solo los métodos declarados en un objeto determinado en lugar de atravesar el árbol de herencia. Además, no usan BindingFlags parámetros para el filtrado. En su lugar, el filtrado tiene lugar en el código de usuario, mediante consultas LINQ en las colecciones devueltas. En el caso de los objetos de reflexión que se originan con el tiempo de ejecución (por ejemplo, como resultado de typeof(Object)
), recorrer el árbol de herencia se logra mejor mediante el uso de los métodos auxiliares de la RuntimeReflectionExtensions clase . Los consumidores de objetos de contextos de reflexión personalizados no pueden usar estos métodos, y deben recorrer el árbol de herencia por su cuenta.
Restricciones
En una aplicación de Microsoft Store para Windows 8.x, el acceso a ciertos tipos y miembros del marco de trabajo .NET está restringido. Por ejemplo, no puede invocar métodos de .NET Framework que no se incluyen en .NET para aplicaciones de la Tienda Windows 8.x mediante un objeto MethodInfo. Además, se bloquean determinados tipos y miembros que no se consideran seguros en el contexto de una aplicación de la Tienda Windows 8.x, así como los miembros Marshal y WindowsRuntimeMarshal. Esta restricción solo afecta a los tipos y miembros de .NET Framework; puede llamar a su propio código o al de otros fabricantes como lo haría normalmente.
Ejemplo
En este ejemplo se usan los tipos y miembros de reflexión de las aplicaciones .NET para la Tienda Windows 8.x a fin de recuperar los métodos y las propiedades del tipo Calendar, incluidos los métodos y las propiedades heredados. Para ejecutar este código, péguelo en el archivo de código de una página de la Tienda windows 8.x que contiene un Windows.UI.Xaml.Controls.TextBlock control denominado textblock1
en un proyecto denominado Reflection. Si pega este código dentro de un proyecto con un nombre diferente, solo tiene que asegurarse de cambiar el nombre del espacio de nombres para que coincida con el proyecto.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Navigation;
using System.Reflection;
using System.Globalization;
using System.Text;
namespace Reflection
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
TypeInfo t = typeof(Calendar).GetTypeInfo();
IEnumerable<PropertyInfo> pList = t.DeclaredProperties;
IEnumerable<MethodInfo> mList = t.DeclaredMethods;
StringBuilder sb = new StringBuilder();
sb.Append("Properties:");
foreach (PropertyInfo p in pList)
{
sb.Append("\n" + p.DeclaringType.Name + ": " + p.Name);
}
sb.Append("\nMethods:");
foreach (MethodInfo m in mList)
{
sb.Append("\n" + m.DeclaringType.Name + ": " + m.Name);
}
textblock1.Text = sb.ToString();
}
}
}
Imports Windows.UI.Xaml.Navigation
Imports System.Reflection
Imports System.Globalization
Imports System.Text
Public NotInheritable Class MainPage
Inherits Page
Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)
Dim t As TypeInfo = GetType(Calendar).GetTypeInfo()
Dim pList As IEnumerable(Of PropertyInfo) = t.DeclaredProperties
Dim mList As IEnumerable(Of MethodInfo) = t.DeclaredMethods
Dim sb As New StringBuilder()
sb.Append("Properties:")
For Each p As PropertyInfo In pList
sb.Append((vbLf + p.DeclaringType.Name & ": ") + p.Name)
Next
sb.Append(vbLf & "Methods:")
For Each m As MethodInfo In mList
sb.Append((vbLf + m.DeclaringType.Name & ": ") + m.Name)
Next
textblock1.Text = sb.ToString()
End Sub
End Class