Поделиться через


<Элемент ImpliesType> (.NET Native)

Применяет политику к типу, если политика была применена к содержащему типу или методу.

Синтаксис

<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" />

Атрибуты и элементы

В следующих разделах описаны атрибуты, дочерние и родительские элементы.

Атрибуты

Атрибут Тип атрибута Description
Name Общие Обязательный атрибут элемента . Указывает имя типа.
Activate Отражение Необязательный атрибут элемента . Управляет доступом среды выполнения к конструкторам для включения активации экземпляров.
Browse Отражение Необязательный атрибут элемента . Управляет запросами для получения сведений об элементах программы, но не включает доступ среды выполнения.
Dynamic Отражение Необязательный атрибут элемента . Управляет доступом среды выполнения ко всем членам типа, включая конструкторы, методы, поля, свойства и события, чтобы включить динамическое программирование.
Serialize Сериализация Необязательный атрибут элемента . Управляет доступом среды выполнения к конструкторам, полям и свойствам, позволяющим сериализовать и десериализовать экземпляры типа с помощью таких библиотек, как, например, сериализатор Newtonsoft JSON.
DataContractSerializer Сериализация Необязательный атрибут элемента . Определяет политику для сериализации, в которой используется класс System.Runtime.Serialization.DataContractSerializer.
DataContractJsonSerializer Сериализация Необязательный атрибут элемента . Определяет политику для сериализации JSON, в которой используется класс System.Runtime.Serialization.Json.DataContractJsonSerializer.
XmlSerializer Сериализация Необязательный атрибут элемента . Определяет политику для сериализации XML, в которой используется класс System.Xml.Serialization.XmlSerializer.
MarshalObject Interop Необязательный атрибут элемента . Определяет политику для маршалинга ссылочных типов в среды выполнения Windows и COM.
MarshalDelegate Interop Необязательный атрибут элемента . Определяет политики для маршалинга типов делегатов как указателей функции на машинный код.
MarshalStructure Interop Необязательный атрибут элемента . Определяет политики для маршалинга типов значений в машинный код.

Name - атрибут

значение Описание
type_name Имя типа. Если тип, представленный этим элементом <ImpliesType>, находится в том же пространстве имен, что и содержащий его элемент <Type>, атрибут type_name может содержать имя типа без пространства имен. В противном случае атрибут type_name должен содержать полное имя типа.

Все остальные атрибуты

значение Описание
policy_setting Параметр, применяемый для этого типа политики. Допустимые значения All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal и Required All. Дополнительные сведения см. в разделе Параметры политики директив среды выполнения.

Дочерние элементы

Нет.

Родительские элементы

Элемент Описание
<Тип> Применяет политику отражения к типу и всем его членам.
<TypeInstantiation> Применяет политику отражения к сконструированному универсальному типу и всем его членам.
<Method> Применяет политику отражения к методу.

Замечания

Элемент <ImpliesType> в основном предназначен для использования в библиотеках. Он используется в следующем сценарии:

  • Если процедура должна отражаться на одном типе, она обязательно должна отражаться на втором типе

  • В противном случае метаданные для корректной реализации второго типа недоступны, так как статический анализ не указывает, что это необходимо.

Чаще всего двумя типами являются универсальные экземпляры общих аргументов типа.

Элемент <ImpliesType> был определен исходя из предположения, что необходимость отражения в тип, заданный родительским элементом, предполагает необходимость отражения в тип, заданный элементом <ImpliesType>. Например, для двух типов применяются следующие директивы отражения Explicit<T> и Implicit<T>.

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

Эта директива не действует, пока экземпляр Explicit не определил параметр политики Dynamic. Например, если это так, для Explicit<Int32>, Implicit<Int32> создается экземпляр с открытыми корневыми членами, а их метаданные становятся доступными для динамического программирования.

Ниже приведен реальный пример, который применяется по крайней мере к одному сериализатору. На директивы распространяется требование, по которому отражение для IList<тип> также включает отражение для соответствующего типа List<тип> без необходимости указывать аннотации для каждого приложения.

<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>

См. также