Reflexión en .NET Framework para aplicaciones de la Tienda WindowsReflection in the .NET Framework for Windows Store Apps

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 Tienda Windows 8.xWindows 8.x Store.Starting with the .NET Framework 4.5, the .NET Framework includes a set of reflection types and members for use in Tienda Windows 8.xWindows 8.x Store apps. Estos tipos y miembros están disponibles en la versión completa de .NET Framework, así como en .NET para aplicaciones de la Tienda Windows.These types and members are available in the full .NET Framework as well as in the .NET for Windows Store apps. En este documento se explican las diferencias principales entre estos y sus homólogos en .NET Framework 4 y versiones anteriores.This document explains the major differences between these and their counterparts in the .NET Framework 4 and earlier versions.

Si está creando una aplicación de la Tienda Windows 8.xWindows 8.x Store, debe usar los tipos y miembros de reflexión de .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps.If you are creating a Tienda Windows 8.xWindows 8.x Store app, you must use the reflection types and members in the .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps. Estos tipos y miembros también están disponibles, aunque no son necesarios, para su uso en aplicaciones de escritorio, por lo que puede usar el mismo código para ambos tipos de aplicaciones.These types and members are also available, but not required, for use in desktop apps, so you can use the same code for both types of apps.

TypeInfo y carga de ensambladosTypeInfo and Assembly Loading

En .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps, la clase TypeInfo contiene algunas funcionalidades de la clase Type de .NET Framework 4.In the .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps, the TypeInfo class contains some of the functionality of the .NET Framework 4 Type class. Un objeto Type representa una referencia a una definición de tipo, mientras que un objeto TypeInfo representa la propia definición de tipo.A Type object represents a reference to a type definition, whereas a TypeInfo object represents the type definition itself. Esto permite manipular los objetos Type sin necesidad de que el runtime cargue el ensamblado al que hacen referencia.This enables you to manipulate Type objects without necessarily requiring the runtime to load the assembly they reference. Al obtener el objeto TypeInfo asociado se fuerza la carga del ensamblado.Getting the associated TypeInfo object forces the assembly to load.

TypeInfo contiene muchos de los miembros disponibles en Type, y muchas de las propiedades de reflexión de .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps devuelven colecciones de objetos TypeInfo.TypeInfo contains many of the members available on Type, and many of the reflection properties in the .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps return collections of TypeInfo objects. Para obtener un objeto TypeInfo a partir de un objeto Type, use el método GetTypeInfo.To get a TypeInfo object from a Type object, use the GetTypeInfo method.

Métodos de consultaQuery Methods

En .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps, use las propiedades de reflexión que devuelven colecciones de IEnumerable<T> en lugar de los métodos que devuelven matrices.In the .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps, you use the reflection properties that return IEnumerable<T> collections instead of methods that return arrays. Los contextos de reflexión pueden implementar el recorrido diferido de estas colecciones para los ensamblados o tipos de gran tamaño.Reflection contexts can implement lazy traversal of these collections for large assemblies or types.

Las propiedades de reflexión solo devuelven los métodos declarados en un objeto determinado en lugar de recorrer el árbol de herencia.The reflection properties return only the declared methods on a particular object instead of traversing the inheritance tree. Además, no usan los parámetros BindingFlags para el filtrado.Moreover, they do not use BindingFlags parameters for filtering. En su lugar, el filtrado tiene lugar en el código de usuario, mediante el uso de consultas LINQ en las colecciones devueltas.Instead, filtering takes place in user code, by using LINQ queries on the returned collections. Para los objetos de reflexión que se originan con el runtime (por ejemplo, como resultado de typeof(Object)), recorrer el árbol de herencia se logra mejor usando los métodos del asistente de la clase RuntimeReflectionExtensions.For reflection objects that originate with the runtime (for example, as the result of typeof(Object)), traversing the inheritance tree is best accomplished by using the helper methods of the RuntimeReflectionExtensions class. 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.Consumers of objects from customized reflection contexts cannot use these methods, and must traverse the inheritance tree themselves.

RestriccionesRestrictions

En una aplicación de la Tienda Windows 8.xWindows 8.x Store, el acceso a algunos tipos y miembros de .NET Framework está restringido.In a Tienda Windows 8.xWindows 8.x Store app, access to some .NET Framework types and members is restricted. Por ejemplo, no puede llamar a los métodos de .NET Framework que no estén incluidos en .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps usando un objeto MethodInfo.For example, you cannot call .NET Framework methods that are not included in .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps, by using a MethodInfo object. Además, ciertos tipos y miembros que no se consideran seguros en el contexto de una aplicación de la Tienda Windows 8.xWindows 8.x Store están bloqueados, al igual que los miembros Marshal y WindowsRuntimeMarshal.In addition, certain types and members that are not considered safe within the context of a Tienda Windows 8.xWindows 8.x Store app are blocked, as are Marshal and WindowsRuntimeMarshal members. 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.This restriction affects only .NET Framework types and members; you can call your code or third-party code as you normally would.

EjemploExample

Este ejemplo usa tipos y miembros de reflexión de .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps para recuperar los métodos y las propiedades del tipo Calendar, incluidos los métodos y las propiedades heredados.This example uses the reflection types and members in the .NET para aplicaciones de la Tienda Windows 8.x.NET for Windows 8.x Store apps to retrieve the methods and properties of the Calendar type, including inherited methods and properties. Para ejecutar este código, péguelo en el archivo de código de una página Tienda Windows 8.xWindows 8.x Store que contenga un control Windows.UI.Xaml.Controls.TextBlock denominado textblock1 en un proyecto denominado Reflexión.To run this code, paste it into the code file for a Tienda Windows 8.xWindows 8.x Store page that contains a Windows.UI.Xaml.Controls.TextBlock control named textblock1 in a project named Reflection. Si pega este código dentro de un proyecto con otro nombre, asegúrese de cambiar el nombre del espacio de nombres para que coincida con su proyecto.If you paste this code inside a project with a different name, just make sure you change the namespace name to match your project.

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

Vea tambiénSee also