Aracılığıyla paylaş


Windows Mağazası Uygulamaları için .NET Framework'te Yansıma

.NET Framework 4.5'den başlayarak .NET Framework, Windows 8.x Store uygulamalarında kullanılmak üzere bir yansıma türleri ve üyeleri kümesi içerir. Bu türler ve üyeler hem tam .NET Framework'te hem de Windows Mağazası için .NET uygulamalarında kullanılabilir. Bu belgede, .NET Framework 4 ve önceki sürümlerde bunlar ile karşılık gelenleri arasındaki önemli farklar açıklanmaktadır.

Bir Windows 8.x Store uygulaması oluşturuyorsanız, Windows 8.x Store uygulamaları için .NET'teki yansıma türlerini ve üyeleri kullanmanız gerekir. Bu türler ve üyeler masaüstü uygulamalarında kullanılmak üzere kullanılabilir ancak gerekli değildir, böylece her iki uygulama türü için de aynı kodu kullanabilirsiniz.

TypeInfo ve Bütünleştirme Yükleme

Windows 8.x Store için .NET uygulamalarında, TypeInfo sınıfı .NET Framework 4 Type sınıfının bazı işlevlerini içerir. Nesne Type bir tür tanımına başvuruyu, nesne ise TypeInfo tür tanımının kendisini temsil eder. Bu, çalışma zamanı ortamın başvurduğu derlemeyi yüklemesi gerekmeksizin nesneleri Type yönetmenizi sağlar. İlişkili TypeInfo nesneyi almak, derlemeyi yüklemeye zorlar.

TypeInfo, Type üzerinde kullanılabilen üyelerin çoğunu içerir ve Windows 8.x Store uygulamaları için .NET'teki yansıma özelliklerinin çoğu TypeInfo nesne koleksiyonlarını döndürür. TypeInfo nesnesinden bir Type nesnesi almak için GetTypeInfo yöntemini kullanın.

Sorgu Yöntemleri

Windows 8.x Store için .NET uygulamalarında, dizi döndüren yöntemler yerine koleksiyonları döndüren IEnumerable<T> yansıma özelliklerini kullanırsınız. Yansıma bağlamları, büyük derlemeler veya türler için bu koleksiyonların yavaş geçişini uygulayabilir.

Yansıma özellikleri, devralma ağacından geçiş yerine yalnızca belirli bir nesnede bildirilen yöntemleri döndürür. Ayrıca, filtreleme için BindingFlags parametrelerini kullanmazlar. Bunun yerine, döndürülen koleksiyonlarda LINQ sorguları kullanılarak kullanıcı kodunda filtreleme gerçekleştirilir. Çalışma zamanı ile (örneğin, sonucu typeof(Object) olarak) kaynaklanan yansıma nesneleri için, devralma ağacını gözden geçirme, RuntimeReflectionExtensions sınıfının yardımcı yöntemleri kullanılarak en iyi şekilde gerçekleştirilir. Özelleştirilmiş yansıma bağlamlarındaki nesne tüketicileri bu yöntemleri kullanamaz ve devralma ağacı boyunca kendileri geçiş yapmak zorundadır.

Kısıtlamalar

Windows 8.x Store uygulamasında bazı .NET Framework türlerine ve üyelerine erişim kısıtlanır. Örneğin, bir MethodInfo nesne kullanarak Windows 8.x Store uygulamaları için .NET'e dahil olmayan .NET Framework yöntemlerini çağıramazsınız. Ayrıca, Windows 8.x Store uygulaması bağlamında güvenli kabul edilmeyen belirli türler ve üyeler ile Marshal ve WindowsRuntimeMarshal üyeleri engellenir. Bu kısıtlama yalnızca .NET Framework türlerini ve üyelerini etkiler; kodunuzu veya üçüncü taraf kodunuzu normalde yaptığınız gibi çağırabilirsiniz.

Örnek

Bu örnek, Calendar türünün devralınan yöntemleri ve özellikleri de dahil olmak üzere yöntemlerini ve özelliklerini almak için Windows 8.x Store uygulamaları için .NET'teki yansıma türlerini ve üyelerini kullanır. Bu kodu çalıştırmak için, Yansıma adlı projede, Windows.UI.Xaml.Controls.TextBlock adlı denetimi içeren textblock1 bir Windows 8.x Store sayfasının kod dosyasına yapıştırın. Bu kodu farklı bir ada sahip bir projenin içine yapıştırırsanız, ad alanı adını projenizle eşleşecek şekilde değiştirdiğinizden emin olun.

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

Ayrıca bakınız