Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale
Informazioni
L'argomento richiesto è visualizzato di seguito, ma non è incluso in questa libreria.

Reflection in .NET Framework per applicazioni Windows Store

.NET Framework 4.5

A partire da .NET Framework 4.5, .NET Framework include un set di tipi di reflection e di membri che si possono usare per le applicazioni Windows Store. Questi tipi e questi membri sono disponibili in .NET Framework nonché in .NET per applicazioni Windows Store. In questo documento vengono illustrate le differenze principali tra questi e le relative controparti in .NET Framework 4 e versioni precedenti.

Se si crea un'applicazione Windows Store, è necessario utilizzare i tipi di reflection e i membri in .NET per applicazioni Windows Store. Questi tipi e questi membri sono inoltre disponibili, ma non obbligatori, per essere usati nelle applicazioni desktop, così si può utilizzare lo stesso codice per entrambi i tipi di applicazione.

In .NET per applicazioni Windows Store, la classe TypeInfo contiene alcune delle funzionalità della classe Type di .NET Framework 4. Un oggetto Type rappresenta un riferimento a una definizione di tipo, mentre un oggetto TypeInfo rappresenta la definizione del tipo stesso. Questo consente di modificare gli oggetti Type senza richiedere necessariamente al runtime di caricare l'assembly a cui fanno riferimento. Ottenere l'oggetto TypeInfo associato costringe il caricamento dell'assembly.

TypeInfo contiene molti dei membri disponibili in Type e molte proprietà di reflection in .NET per applicazioni Windows Store ritornano raccolte di oggetti TypeInfo. Per ottenere un oggetto TypeInfo da un oggetto Type, utilizzare il metodo GetTypeInfo.

In .NET per applicazioni Windows Store, utilizzare le proprietà di reflection che restituiscono raccolte di IEnumerable<T> anziché i metodi che restituiscono matrici. I contesti di reflection possono implementare l'attraversamento lazy di queste raccolte di grandi assembly o tipi.

Le proprietà di reflection restituiscono solo i metodi dichiarati in un particolare oggetto e non attraversano l'albero di ereditarietà. Inoltre, non utilizzano i parametri BindingFlags per il filtraggio. Invece, il filtraggio avviene nel codice utente, utilizzando le query LINQ sulle raccolte restituite. Per gli oggetti di reflection generati con il runtime (ad esempio come risultato di typeof(Object)), l'attraversamento dell'albero di ereditarietà viene realizzato in modo migliore se si utilizzano i metodi di supporto della classe RuntimeReflectionExtensions. Gli utenti di oggetti derivanti da contesti di reflection personalizzati non possono utilizzare questi metodi e devono attraversare l'albero di ereditarietà.

In un'applicazione Windows Store, l'accesso ad alcuni tipi e membri di .NET Framework viene limitato. Ad esempio, non si possono chiamare i metodi di .NET Framework che non sono inclusi in .NET per applicazioni Windows Store, tramite un oggetto MethodInfo. Inoltre, determinati tipi e membri che non sono considerati sicuri nel contesto di un'applicazione Windows Store vengono bloccati, come i membri Marshal e WindowsRuntimeMarshal. Questa restrizione influisce solo sui tipi e sui membri di .NET Framework; si può però chiamare codice proprio o codice di terze parti come si fa normalmente.

In questo esempio vengono utilizzati i tipi e i membri di reflection in .NET per applicazioni Windows Store per ottenere i metodi e le proprietà del tipo Calendar, inclusi i metodi e le proprietà ereditati. Per eseguire questo codice, incollarlo nel file di codice di una pagina Windows Store che contiene un controllo Windows.UI.Xaml.Controls.Textblock denominato textblock1.


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();

        }
    }
}


Aggiunte alla community

Mostra:
© 2015 Microsoft