Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяет политику отражения среды применения к сконструированному универсальному типу.
Синтаксис
<TypeInstantiation Name="type_name"
Arguments="type_arguments"
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 |
Общие | Обязательный атрибут элемента . Указывает имя типа. |
Arguments |
Общие | Обязательный атрибут элемента . Задает аргументы универсального типа. При наличии нескольких аргументов, они разделяются запятыми. |
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 | Имя типа. Если этот <TypeInstantiation> элемент является дочерним элементом пространства имен>, элементом <<Type> или другим <TypeInstantiation> элементом, type_name может указать имя типа без его пространства имен. В противном случае атрибут type_name должен содержать полное имя типа. Имя типа не является внутренним. Например, для объекта System.Collections.Generic.List<T> элемент <TypeInstantiation> может выглядеть следующим образом:\<TypeInstantiation Name=System.Collections.Generic.List Dynamic="Required Public" /> |
Атрибут аргументов
| значение | Описание |
|---|---|
| type_argument | Задает аргументы универсального типа. При наличии нескольких аргументов, они разделяются запятыми. Каждый аргумент должен содержать полное имя типа. |
Все остальные атрибуты
| значение | Описание |
|---|---|
| policy_setting | Значение для применения к этому типу политики для сконструированного универсального типа. Допустимые значения All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal и Required All. Дополнительные сведения см. в разделе Параметры политики директив среды выполнения. |
Дочерние элементы
| Элемент | Description |
|---|---|
| <Событие> | Применяет политику отражения события, относящегося к этому типу. |
| <Поле> | Применяет политику отражения поля, относящегося к этому типу. |
| <ImpliesType> | Применяет политику к типу, если политика была применена для типа, представленного содержащим элементом <TypeInstantiation>. |
| <Method> | Применяет политику отражения метода, относящегося к этому типу. |
| <MethodInstantiation> | Применяет политику отражения к сконструированному универсальному методу, относящемуся к этому типу. |
| <Свойство> | Применяет политику отражения к свойству, относящемуся к этому типу. |
| <Тип> | Применяет политику отражения к вложенному типу. |
<TypeInstantiation> |
Применяет политику отражения к вложенному сконструированному универсальному типу. |
Родительские элементы
| Элемент | Description |
|---|---|
| <Приложение> | Служит в качестве контейнера для типов и членов типов приложения, метаданные которого доступны для отражения во время выполнения. |
| <Сборка> | Применяет политику отражения ко всем типам в указанной сборке. |
| <Библиотека> | Определяет сборку, содержащую типы и члены типов, метаданные которой доступны для отражения во время выполнения. |
| <Пространство имен> | Применяет политику отражения ко всем типам в пространстве имен. |
| <Тип> | Применяет политику отражения к типу и всем его членам. |
<TypeInstantiation> |
Применяет политику отражения к сконструированному универсальному типу и всем его членам. |
Замечания
Атрибуты отражения, сериализации и взаимодействия являются необязательными. Тем не менее, по крайней мере один должен присутствовать.
<TypeInstantiation> Если элемент является дочерним элементом <сборки>, <пространства> имен или <type>, он переопределяет параметры политики, определенные родительским элементом. <Если элемент Type> определяет соответствующее определение универсального типа, <TypeInstantiation> элемент переопределяет политику отражения среды выполнения только для экземпляров указанного созданного универсального типа.
Пример
В следующем примере отражение используется для получения определения универсального типа из сконструированного объекта Dictionary<TKey,TValue>. Отражение используется также для отображения сведений об объектахType, представляющих сконструированные универсальные типы и определения универсальных типов. Переменная b в примере — TextBlock это элемент управления.
public static void GetGenericInfo()
{
// Get the type that represents the generic type definition and
// display information about it.
Type generic1 = typeof(Dictionary<,>);
DisplayGenericType(generic1);
// Get the type that represents a constructed generic type and its
// generic type definition.
Dictionary<string, Example> d1 = new Dictionary<string, Example>();
Type constructed1 = d1.GetType();
Type generic2 = constructed1.GetGenericTypeDefinition();
// Display information for the generic type definition, and
// for the constructed type Dictionary<String, Example>.
DisplayGenericType(constructed1);
DisplayGenericType(generic2);
// Construct an array of type arguments.
Type[] typeArgs = { typeof(string), typeof(Example) };
// Construct the type Dictionary<String, Example>.
Type constructed2 = generic1.MakeGenericType(typeArgs);
DisplayGenericType(constructed2);
object o = Activator.CreateInstance(constructed2);
b.Text += "\r\nCompare types obtained by different methods:\n";
b.Text += String.Format(" Are the constructed types equal? {0}\n",
(d1.GetType() == constructed2));
b.Text += String.Format(" Are the generic definitions equal? {0}\n",
(generic1 == constructed2.GetGenericTypeDefinition()));
// Demonstrate the DisplayGenericType and
// DisplayGenericParameter methods with the Test class
// defined above. This shows base, interface, and special
// constraints.
DisplayGenericType(typeof(TestGeneric<>));
}
// Display information about a generic type.
private static void DisplayGenericType(Type t)
{
b.Text += String.Format("\n{0}\n", t);
b.Text += String.Format(" Generic type? {0}\n",
t.GetTypeInfo().GenericTypeParameters.Length !=
t.GenericTypeArguments.Length);
b.Text += String.Format(" Generic type definition? {0}\n",
! t.IsConstructedGenericType);
// Get the generic type parameters.
Type[] typeParameters = t.GetTypeInfo().GenericTypeParameters;
if (typeParameters.Length > 0)
{
b.Text += String.Format(" {0} type parameters:\n",
typeParameters.Length);
foreach (Type tParam in typeParameters)
b.Text += String.Format(" Type parameter: {0} position {1}\n",
tParam.Name, tParam.GenericParameterPosition);
}
else
{
Type[] typeArgs = t.GenericTypeArguments;
b.Text += String.Format(" {0} type arguments:\n",
typeArgs.Length);
foreach (var tArg in typeArgs)
b.Text += String.Format(" Type argument: {0}\n",
tArg);
}
b.Text += "\n-------------------------------\n";
}
}
public interface ITestInterface { }
public class TestBase { }
public class TestGeneric<T> where T : TestBase, ITestInterface, new() { }
public class TestArgument : TestBase, ITestInterface
{
public TestArgument()
{ }
}
После компиляции с цепочкой инструментов .NET Native в примере возникает исключение MissingMetadataException в строке, вызывающей Type.GetGenericTypeDefinition метод. Чтобы избежать исключений и предоставить необходимые метаданные, добавьте следующий элемент <TypeInstantiation> элемент в файл директив среды выполнения:
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Assembly Name="*Application*" Dynamic="Required All" />
<TypeInstantiation Name="System.Collections.Generic.Dictionary"
Arguments="System.String,GenericType.Example"
Dynamic="Required Public" />
</Application>
</Directives>