Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяет политику к типу, если политика была применена к содержащему типу или методу.
Синтаксис
<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>