Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Desde sua versão 4.5, o .NET Framework inclui um conjunto de membros e tipos de reflexão para uso em aplicativos Windows 8.x Store. Esses tipos e membros estão disponíveis no .NET Framework completo, bem como no .NET para aplicativos da Windows Store. Este documento explica as principais diferenças entre eles e seus colegas no .NET Framework 4 e versões anteriores.
Se estiver criando um aplicativo Windows 8.x Store, você deverá usar os tipos de reflexão e os membros no .NET para aplicativos Windows 8.x Store. Esses tipos e membros também estão disponíveis, mas não são necessários, para uso em aplicativos da área de trabalho, para que você possa usar o mesmo código para ambos os tipos de aplicativos.
TypeInfo e Carregamento do Assembly
Nos aplicativos .NET para Windows 8.x Store, a TypeInfo classe contém algumas das funcionalidades da classe .NET Framework 4 Type . Um Type objeto representa uma referência a uma definição de tipo, enquanto um TypeInfo objeto representa a própria definição de tipo. Isso permite manipular Type objetos sem necessariamente exigir que o runtime carregue o assembly que eles referenciam. Obter o objeto TypeInfo associado força o assembly a ser carregado.
TypeInfo contém muitos dos membros disponíveis em Type e muitas das propriedades de reflexão no .NET para aplicativos Windows 8.x Store retornam coleções de objetos TypeInfo. Para obter um TypeInfo objeto de um Type objeto, use o GetTypeInfo método.
Métodos de consulta
No .NET para aplicativos Windows 8.x Store, use as propriedades de reflexão que retornam coleções IEnumerable<T> em vez de métodos que retornam matrizes. Os contextos de reflexão podem implementar passagens lentas dessas coleções para grandes tipos ou assemblies.
As propriedades de reflexão retornam apenas os métodos declarados em um objeto específico em vez de atravessar a árvore de herança. Além disso, eles não usam BindingFlags parâmetros para filtragem. Em vez disso, a filtragem ocorre no código do usuário usando consultas LINQ nas coleções retornadas. Para objetos de reflexão que se originam com o runtime (por exemplo, como resultado de typeof(Object)
), a passagem pela árvore de herança é melhor realizada usando os métodos auxiliares da classe RuntimeReflectionExtensions. Os consumidores de objetos de contextos de reflexão personalizados não podem usar esses métodos e devem percorrer a árvore de herança sozinhos.
Restrições
Em um aplicativo da Windows 8.x Store, o acesso a alguns tipos e membros do .NET Framework é restrito. Por exemplo, você não pode chamar métodos do .NET Framework que não estão incluídos em aplicativos .NET para Windows 8.x Store usando um MethodInfo objeto. Além disso, determinados tipos e membros que não são considerados seguros no contexto de um aplicativo da Windows 8.x Store são bloqueados, assim como os membros Marshal e WindowsRuntimeMarshal. Essa restrição afeta apenas os tipos e membros do .NET Framework; você pode chamar seu código ou código de terceiros como faria normalmente.
Exemplo
Este exemplo usa os tipos e membros de reflexão no .NET para aplicativos Windows 8.x Store para recuperar os métodos e propriedades do tipo Calendar, incluindo os métodos e propriedades herdados. Para executar esse código, cole-o no arquivo de código de uma página da Windows 8.x Store que contém um Windows.UI.Xaml.Controls.TextBlock controle nomeado textblock1
em um projeto chamado Reflexão. Se você colar esse código dentro de um projeto com um nome diferente, apenas certifique-se de alterar o nome do namespace para corresponder ao seu projeto.
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