Language

Windows ストア アプリの .NET Framework でのリフレクション

.NET Framework には、Windows 8.x ストア アプリで使用するリフレクション型とメンバーのセットが含まれています。 これらの型とメンバーは、完全な .NET Framework および Windows Store アプリの.NETで使用できます。 この記事では、.NET Framework 4 以前のバージョンでのこれらのバージョンと対応するバージョンの主な違いについて説明します。

Windows 8.x ストア アプリを作成する場合は、Windows 8.x ストア アプリの.NETでリフレクションの種類とメンバーを使用する必要があります。 これらの型とメンバーは、デスクトップ アプリで使用するために使用できますが、必須ではありません。そのため、両方の種類のアプリで同じコードを使用できます。

TypeInfo とアセンブリの読み込み

Windows 8.x ストア アプリの.NETでは、TypeInfo クラスには、.NET Framework 4 Type クラスの機能の一部が含まれています。 Type オブジェクトは型定義への参照を表し、TypeInfo オブジェクトは型定義自体を表します。 これにより、参照するアセンブリをランタイムが読み込む必要なしに、 Type オブジェクトを操作できます。 関連付けられている TypeInfo オブジェクトを取得すると、アセンブリが強制的に読み込まれます。

TypeInfoには、Typeで使用できるメンバーの多くが含まれており、Windows 8.x ストア アプリの.NETのリフレクション プロパティの多くは、TypeInfo オブジェクトのコレクションを返します。 TypeInfo オブジェクトからType オブジェクトを取得するには、GetTypeInfo メソッドを使用します。

クエリ メソッド

Windows 8.x ストア アプリの.NETでは、配列を返すメソッドではなく、コレクションIEnumerable<T>返すリフレクション プロパティを使用します。 リフレクション コンテキストでは、大規模なアセンブリまたは型に対してこれらのコレクションの遅延トラバーサルを実装できます。

リフレクション プロパティは、継承ツリーを走査するのではなく、特定のオブジェクトで宣言されたメソッドのみを返します。 さらに、フィルター処理に BindingFlags パラメーターは使用しません。 代わりに、返されたコレクションに対して LINQ クエリを使用して、ユーザー コードでフィルター処理が行われます。 ランタイムに由来するリフレクション オブジェクトの場合 (たとえば、 typeof(Object)の結果として)、継承ツリーの走査は、 RuntimeReflectionExtensions クラスのヘルパー メソッドを使用して行うのが最適です。 カスタマイズされたリフレクション コンテキストのオブジェクトのコンシューマーは、これらのメソッドを使用できず、継承ツリー自体を走査する必要があります。

制約

Windows 8.x ストア アプリでは、一部の .NET Framework の種類とメンバーへのアクセスが制限されます。 たとえば、MethodInfo オブジェクトを使用して、Windows 8.x ストア アプリの.NETに含まれていない .NET Framework メソッドを呼び出すことはできません。 さらに、Windows 8.x ストア アプリのコンテキスト内で安全と見なされない特定の型とメンバーは、MarshalおよびWindowsRuntimeMarshalメンバーと同様にブロックされます。 この制限は、.NET Framework の型とメンバーにのみ影響します。通常どおり、コードまたはサードパーティのコードを呼び出すことができます。

こちらも参照ください