次の方法で共有


<ImpliesType> 要素 (.NET ネイティブ)

型にポリシーを適用します (含んでいる型またはメソッドにそのポリシーが適用されている場合)。

構文

<ImpliesType Name="type_name"
             Activate="policy_type"
             Browse="policy_type"
             Dynamic="policy_type"
             Serialize="policy_type"
             DataContractSerializer="policy_setting"
             DataContractJsonSerializer="policy_setting"
             XmlSerializer="policy_setting"
             MarshalObject="policy_setting"
             MarshalDelegate="policy_setting"
             MarshalStructure="policy_setting" />

属性および要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性 属性の型 説明
Name 全般 必須の属性です。 型名を指定します。
Activate リフレクション 省略可能な属性です。 コンストラクターへの実行時アクセスを制御して、インスタンスのアクティブ化を有効にします。
Browse リフレクション 省略可能な属性です。 プログラム要素に関する情報の照会を制御しますが、実行時アクセスは有効にしません。
Dynamic リフレクション 省略可能な属性です。 コンストラクター、メソッド、フィールド、プロパティ、およびイベントを含むすべての型のメンバーへの実行時アクセスを制御して、動的プログラミングを有効にします。
Serialize シリアル化 省略可能な属性です。 コンストラクター、フィールド、およびプロパティへの実行時アクセスを制御し、Newtonsoft の JSON シリアライザーなどのライブラリによって型インスタンスをシリアル化および逆シリアル化できるようにします。
DataContractSerializer シリアル化 省略可能な属性です。 System.Runtime.Serialization.DataContractSerializer クラスを使用するシリアル化のポリシーを制御します。
DataContractJsonSerializer シリアル化 省略可能な属性です。 System.Runtime.Serialization.Json.DataContractJsonSerializer クラスを使用する JSON シリアル化のポリシーを制御します。
XmlSerializer シリアル化 省略可能な属性です。 System.Xml.Serialization.XmlSerializer クラスを使用する XML シリアル化のポリシーを制御します。
MarshalObject Interop 省略可能な属性です。 Windows ランタイムと COM に参照型をマーシャリングするためのポリシーを制御します。
MarshalDelegate Interop 省略可能な属性です。 ネイティブ コードへの関数ポインターとしてデリゲート型をマーシャリングするためのポリシーを制御します。
MarshalStructure Interop 省略可能な属性です。 値型をネイティブ コードにマーシャリングするためのポリシーを制御します。

Name 属性

[値] 説明
type_name 型名。 この <ImpliesType> 要素により表される型がそれを含んでいる <Type> 要素と同じ名前空間にある場合、type_name には名前空間なしで型の名前を含めることができます。 それ以外の場合は、type_name には完全修飾型名を含める必要があります。

その他すべての属性

[値] 説明
policy_setting このポリシーの種類に適用する設定です。 指定できる値は、AllAutoExcludedPublicPublicAndInternalRequired PublicRequired PublicAndInternal、および Required All です。 詳細については、「ランタイム ディレクティブのポリシー設定」を参照してください。

子要素

なし。

親要素

要素 内容
<種類> 型とそのすべてのメンバーにリフレクション ポリシーを適用します。
<TypeInstantiation> 構築されたジェネリック型とそのすべてのメンバーにリフレクション ポリシーを適用します。
<メソッド> メソッドにリフレクション ポリシーを適用します。

解説

<ImpliesType> 要素は主にライブラリによる使用を想定しています。 これは、次のシナリオに対応します。

  • ルーチンを 1 つの型にリフレクションする必要がある場合、2 番目の型にもリフレクションする必要がある。

  • スタティック分析で必要であると示されないため、2 番目の型の暗黙的なインスタンス化のメタデータをそれ以外の方法で使用できない。

最も一般的には、2 つの型は共有型引数を持つジェネリックなインスタンス化です。

<ImpliesType> 要素は、その親要素により指定される型へのリフレクションが必要な場合、<ImpliesType> 要素によって指定される型へのリフレクションも暗黙的に必要になるという前提により定義されました。 たとえば、次のリフレクション ディレクティブは、Explicit<T>Implicit<T> の 2 つの型に適用されます。

<Type Name="Explicit{ET}">
    <ImpliesType Name="Implicit{ET}" Dynamic="Required Public" />
</Type>

このディレクティブは、Explicit のインスタンス化に Dynamic ポリシー設定が定義されていない場合は効果がありません。 たとえば、Explicit<Int32> の場合、Implicit<Int32> はそのパブリック メンバーをルートとしてインスタンス化され、そのメタデータが動的プログラミングで使用できるようになります。

1 つ以上のシリアライザーに適用される、実際の例を次に示します。 ディレクティブは、IList<something> と型指定されたものに対するリフレクションでは、アプリケーションごとの注釈なしで、対応する List<something> 型へのリフレクションも必要になるという要件を表します。

<Type Name="System.Collections.Generic.IList{T}">
   <ImpliesType Name="System.Collections.Generic.List{T}" Serialize="Public" />
</Type>

<ImpliesType> 要素は <Method> 要素内にも配置できます。これは、ジェネリック メソッドのインスタンス化が型のインスタンス化へのリフレクションを暗黙的に決定する場合があるためです。 たとえば、関連付けられている 型と 型と共に、特定のライブラリが動的にアクセスするジェネリック メソッド IEnumerable<T> MakeEnumerable<T>(string spelling, T defaultValue)List<T>Array を考えます。 これは次のように表すことができます。

<Type Name="MyType">
    <Method Name="MakeEnumerable{T}" Signature="(System.String, T)" Dynamic="Included">
        <ImpliesType Name="T[]" Dynamic="Public" />
        <ImpliesType Name="System.Collections.Generic.List{T}" Dynamic="Public" />
    </Method>
</Type>

関連項目