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


<Элемент 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" />

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

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

Атрибуты

Атрибут Тип атрибута Описание
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> Применяет политику отражения к сконструированному универсальному типу и всем его членам.
<Метод> Применяет политику отражения к методу.

Комментарии

Элемент <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>

См. также раздел