Compartilhar via


<Elemento Type> (.NET Native)

Aplica a política de runtime a um tipo específico, como uma classe ou estrutura.

Syntax

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

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Tipo de atributo Descrição
Name Geral Atributo obrigatório. Especifica o nome do tipo.
Activate Reflexão Atributo opcional. Controla o acesso de runtime a construtores para habilitar a ativação de instâncias.
Browse Reflexão Atributo opcional. Controla a consulta para obter informações sobre elementos do programa, mas não permite qualquer acesso de runtime.
Dynamic Reflexão Atributo opcional. Controla o acesso a todos os tipos de membro ao runtime, incluindo construtores, métodos, campos, propriedades e eventos, habilitando a programação dinâmica.
Serialize Serialização Atributo opcional. Controla o acesso ao runtime para construtores, campos e propriedades para habilitar a serialização e desserialização das instâncias por bibliotecas como o serializador Newtonsoft JSON.
DataContractSerializer Serialização Atributo opcional. Controla a política de serialização que usa a classe System.Runtime.Serialization.DataContractSerializer.
DataContractJsonSerializer Serialização Atributo opcional. Controla a política de serialização JSON que usa a classe System.Runtime.Serialization.Json.DataContractJsonSerializer.
XmlSerializer Serialização Atributo opcional. Controla a política de serialização XML que usa a classe System.Xml.Serialization.XmlSerializer.
MarshalObject Interoperabilidade Atributo opcional. Política de controles de marshaling de tipos de referência para o Windows Runtime e COM.
MarshalDelegate Interoperabilidade Atributo opcional. Controla a diretiva de marshaling de tipos delegados como ponteiros de função para código nativo.
MarshalStructure Interoperabilidade Atributo opcional. Controla a política de marshaling de tipos de valor para código nativo.

Atributo de nome

Valor Descrição
type_name O nome do tipo. Se esse <Type> elemento for o filho de um <elemento Namespace> ou de outro <Type> elemento, type_name poderá incluir o nome do tipo sem seu namespace. Caso contrário, o type_name deverá incluir o nome do tipo totalmente qualificado.

Todos os outros atributos

Valor Descrição
policy_setting A configuração a ser aplicada a este tipo de política. Os valores possíveis são All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal e Required All. Para obter mais informações, consulte Configurações da política da diretiva de runtime.

Elementos filho

Elemento Descrição
<AttributeImplies> Se o tipo recipiente for um atributo, ele define a política de runtime para elementos de código à qual o atributo é aplicado.
<Evento> Aplica a política de reflexão a um evento pertencente a esse tipo.
<Campo> Aplica a política de reflexão a um campo pertencente a esse tipo.
<GenericParameter> Aplica a política ao tipo de parâmetro de um tipo genérico.
<ImpliesType> Aplica a política a um tipo, se esta política tiver sido aplicada ao tipo representado pelo elemento <Type> recipiente.
<Método> Aplica a política de reflexão a um método pertencente a esse tipo.
<MethodInstantiation> Aplica a política de reflexão a um método construído genérico pertencente a esse tipo.
<Propriedade> Aplica a política de reflexão a uma propriedade pertencente a esse tipo.
<Subtipos> Aplica a política de runtime a todas as classes herdadas do tipo recipiente.
<Type> Aplica a política de reflexão a um tipo aninhado.
<TypeInstantiation> Aplica a política de reflexão a um tipo genérico construído.

Elementos pai

Elemento Descrição
<Aplicativo> Serve como um contêiner para os tipos amplos de aplicativos cujos metadados estão disponíveis para reflexão no tempo de execução.
<Assembly> Aplica a política de reflexão para todos os tipos em um assembly especificado.
<Biblioteca> Define o assembly que contém tipos e membros de tipo cujos metadados estão disponíveis para reflexão em tempo de execução.
<Namespace> Aplica a política de reflexão a todos os tipos em um namespace.
<Type> Aplica a política de reflexão a um tipo e todos os seus membros.
<TypeInstantiation> Aplica a política de reflexão a um tipo genérico construído e todos os seus membros.

Comentários

Os atributos de reflexão, serialização e interoperabilidade são todos opcionais. Se nenhum estiver presente, o elemento <Type> serve como um contêiner cujos tipos filho definem a política de membros individuais.

Se um <Type> elemento for o filho de um <elemento Assembly>, <Namespace>, <Type>ou <TypeInstantiation> , ele substituirá as configurações de política definidas pelo elemento pai.

Um elemento <Type> de um tipo genérico aplica sua política a todas as instanciações que não possuem sua própria política. A política de tipos genéricos construídos é definida pelo <elemento TypeInstantiation> .

Se o tipo for um tipo genérico, seu nome será decorado por um símbolo de acento grave (') seguido pelo número de parâmetros genéricos. Por exemplo, o atributo Name de um elemento <Type> da classe System.Collections.Generic.List<T> aparece como Name="System.Collections.Generic.List`1".

Exemplo 1

O exemplo a seguir usa a reflexão para exibir informações sobre os campos, propriedades e métodos da classe System.Collections.Generic.List<T>. A variável b no exemplo é um TextBlock controle . Como o exemplo simplesmente recupera informações sobre o tipo, a disponibilidade de metadados é controlada pela configuração da política Browse.

public static void GetReflectionInfo()
{
   Type t = typeof(List<>);
   b.Text += String.Format("Type information for {0}\n", t);

   // Get fields.
   b.Text += "\nFields:\n";

   var fields = t.GetTypeInfo().DeclaredFields;
   int nFields = 0;
   foreach (var field in fields)
   {
      b.Text += String.Format("   {0} ({1})", field.Name, field.FieldType.Name);
      nFields++;
   }
   if (nFields == 0) b.Text += "   None\n";

   // Get properties.
   b.Text += "\nProperties:\n";
   var props = t.GetTypeInfo().DeclaredProperties;
   int nProps = 0;
   foreach (var prop in props)
   {
      b.Text += String.Format("   {0} ({1})\n", prop.Name, prop.PropertyType.Name);
      nProps++;
   }
   if (nProps == 0) b.Text += "   None\n";

   // Get methods.
   b.Text += "\nMethods:\n";
   var methods = t.GetTypeInfo().DeclaredMethods;
   int nMethods = 0;
   foreach (var method in methods)
   {
      if (method.IsSpecialName) continue;
      b.Text += String.Format("   {0}({1}) ({2})\n", method.Name,
                              GetSignature(method), method.ReturnType.Name);
      nMethods++;
   }
   if (nMethods == 0) b.Text += "   None\n";
}

private static string GetSignature(MethodInfo m)
{
   string signature = null;
   var parameters = m.GetParameters();
   for (int ctr = 0; ctr < parameters.Length; ctr++)
   {
      signature += String.Format("{0} {1}", parameters[ctr].ParameterType.Name,
                                  parameters[ctr].Name);
      if (ctr < parameters.Length - 1) signature += ", ";
   }
   return signature;
}

Como os metadados da List<T> classe não são incluídos automaticamente pela cadeia de ferramentas .NET Native, o exemplo não exibe as informações de membro solicitadas em tempo de execução. Para fornecer os metadados necessários, adicione o seguinte elemento <Type> ao arquivo de diretivas de runtime. Observe que, como fornecemos um elemento namespace> pai<, não precisamos fornecer um nome de tipo totalmente qualificado no <Type> elemento .

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
   <Application>
      <Assembly Name="*Application*" Dynamic="Required All" />
      <Namespace Name ="System.Collections.Generic" >
        <Type Name="List`1" Browse="Required All" />
     </Namespace>
   </Application>
</Directives>

Exemplo 2

O exemplo a seguir usa reflexão para recuperar um objeto PropertyInfo que representa a propriedade String.Chars[]. Ele usa o método PropertyInfo.GetValue(Object, Object[]) para recuperar o valor do sétimo caractere de uma cadeia de caracteres e exibir todos os caracteres na cadeia de caracteres. A variável b no exemplo é um TextBlock controle .

public void Example()
{
  string test = "abcdefghijklmnopqrstuvwxyz";

  // Get a PropertyInfo object.
  TypeInfo ti = typeof(string).GetTypeInfo();
  PropertyInfo pinfo = ti.GetDeclaredProperty("Chars");

  // Show the seventh letter ('g')
  object[] indexArgs = { 6 };
  object value = pinfo.GetValue(test, indexArgs);
  b.Text += String.Format("Character at position {0}: {1}\n", indexArgs[0], value);

  // Show the complete string.
  b.Text += "\nThe complete string:\n";
  for (int x = 0; x < test.Length; x++)
  {
      b.Text += pinfo.GetValue(test, new Object[] {x}).ToString() + " ";
  }
}
// The example displays the following output:
//       Character at position 6: g
//
//       The complete string:
//       a b c d e f g h i j k l m n o p q r s t u v w x y z

Como os metadados do String objeto não estão disponíveis, a chamada para o PropertyInfo.GetValue(Object, Object[]) método gera uma NullReferenceException exceção em tempo de execução quando compilada com a cadeia de ferramentas .NET Native. Para eliminar a exceção e fornecer os metadados necessários, adicione o seguinte elemento <Type> ao arquivo de diretivas de runtime:

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <Assembly Name="*Application*" Dynamic="Required All" />
    <Type Name="System.String" Dynamic="Required Public"/> -->
  </Application>
</Directives>

Confira também