이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows 스토어 앱에 대한 .NET Framework의 리플렉션

.NET Framework 4.5

여기 .NET Framework 4.5부터는, .NET Framework에는 Windows 스토어 응용 프로그램에 사용할 리플렉션 형식 및 멤버 집합이 들어 있습니다. 이러한 형식 및 멤버는 .NET for Windows Store apps 와 같이 전체 .NET Framework가 가능합니다. 이 문서에서는 .NET Framework 4과 이 전의 버전에서 이들과 이들의 상대편 사이의 주요 차이점을 설명해 줍니다.

Windows 스토어 응용 프로그램을 만드는 경우 Windows 스토어 앱용 .NET에서 리플렉션 형식과 멤버를 사용해야 합니다. 이 유형과 멤버들 또한 이용가능하지만, 데스크탑 앱의 용도로 필요한 것은 아니므로, 여러분은 두 가지 유형의 앱을 위하여 동일한 코드를 사용할 수 있습니다.

Windows 스토어 앱용 .NET에서 TypeInfo 클래스에는 .NET Framework 4 Type 클래스의 일부 기능이 포함됩니다. Type 개체는 형식 정의에 대한 참조를 나타내는 반면, TypeInfo 개체는 형식 정의 자체를 나타냅니다. 이것은 그것들이 참조하는 어셈블리를 로드하기 위한 런타임을 반드시 요구하지 않으면서, Type 개체를 조작할 수 있도록 해 줍니다. 연결된 TypeInfo 개체를 가져오면 강제로 어셈블리를 로드합니다.

TypeInfo Type에서 사용 가능한 많은 멤버를 포함하고 Windows 스토어 앱용 .NET의 많은 리플렉션 속성이 TypeInfo 개체 집합을 반환합니다. TypeInfo 개체를 Type 개체에서 가져오려면 GetTypeInfo 메서드를 사용합니다.

Windows 스토어 앱용 .NET에서는 배열을 반환하는 메서드 대신 IEnumerable<T> 컬렉션을 반환하는 리플렉션 속성을 사용합니다. 리플렉션 컨텍스트는 대형 어셈블리 또는 형식에 대한 이러한 컬렉션의 지연 순회를 구현할 수 있습니다.

반사 속성 상속 트리를 검색하는 대신 특정 개체에만 선언 된 메서드를 반환합니다. 또한 BindingFlags 매개 변수를 필터링에 사용하지 않습니다. 대신, 반환된 컬렉션의 LINQ 쿼리를 사용하여 사용자 코드에서 필터링을 수행합니다. 런타임 시 발생하는 리플렉션 개체(예: typeof(Object)의 결과)에서 상속 트리를 이동할 경우 RuntimeReflectionExtensions 클래스의 도우미 메서드를 사용하는 것이 가장 좋습니다. 사용자 지정된 리플렉션 컨텍스트의 개체 소비자는 이러한 메서드를 사용할 수 없으며 종속 트리를 직접 이동해야 합니다.

이 Windows 스토어 응용 프로그램에서, 일부.NET Framework 형식 및 멤버에 대한 액세스는 제한됩니다. 예를 들어, MethodInfo 개체를 사용하여, Windows 스토어 앱용 .NET 이 포함되지 않은 .NET Framework 메소드를 호출할 수 없습니다. 추가로, Windows 스토어 응용 프로그램의 컨텍스트 내부에 안전함이 고려없는 특정한 형식과 맴버가, MarshalWindowsRuntimeMarshal 맴버로, 차단됩니다. 제약조건은 .NET Framework 형식과 멤버에만 있습니다; 일방적인 방법으로써 코드 혹은 타사 코드를 호출할 수 있습니다.

이 예제에서는 Windows 스토어 앱용 .NET에서 반영 유형과 멤버를 이용하여, 상속받은 방법과 속성 등 Calendar 유형의 방법과 속성을 검색할 수 있습니다. 코드를 실행하며, textblock1 라 불려지는 Windows.UI.Xaml.Controls.Textblock 컨트롤을 포함하는 Windows 스토어 페이지의 코드파일에 붙여넣습니다.


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

        }
    }
}


커뮤니티 추가 항목

표시:
© 2015 Microsoft