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