<Elemento> Type (.NET Native)

Applica i criteri di runtime a un determinato tipo, ad esempio una classe o una struttura.

Sintassi

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

Attributi ed elementi

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.

Attributi

Attributo Tipo di attributo Descrizione
Name Generali Attributo obbligatorio. Specifica il nome tipo.
Activate Reflection Attributo facoltativo. Controlla l'accesso in fase di esecuzione ai costruttori per abilitare l'attivazione di istanze.
Browse Reflection Attributo facoltativo. Controlla le query per le informazioni sugli elementi di programma, ma non abilita l'accesso in fase di esecuzione.
Dynamic Reflection Attributo facoltativo. Controlla l'accesso in fase di esecuzione a tutti i membri dei tipi, inclusi costruttori, metodi, campi, proprietà ed eventi, per abilitare la programmazione dinamica.
Serialize Serializzazione Attributo facoltativo. Controlla l'accesso in fase di esecuzione a costruttori, campi e proprietà per abilitare la serializzazione e la deserializzazione delle istanze del tipo da parte di librerie quali il serializzatore JSON di Newtonsoft.
DataContractSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione che usano la classe System.Runtime.Serialization.DataContractSerializer.
DataContractJsonSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione JSON che usano la classe System.Runtime.Serialization.Json.DataContractJsonSerializer.
XmlSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione XML che usano la classe System.Xml.Serialization.XmlSerializer.
MarshalObject Interop Attributo facoltativo. Controlla i criteri per effettuare il marshalling dei tipi di riferimento a Windows Runtime e COM.
MarshalDelegate Interop Attributo facoltativo. Controlla i criteri per effettuare il marshalling dei tipi delegati come puntatori a funzioni al codice nativo.
MarshalStructure Interop Attributo facoltativo. Controlla i criteri per il marshalling dei tipi di valore al codice nativo.

Name (attributo)

Valore Descrizione
type_name Nome del tipo. Se questo elemento <Type> è figlio di un elemento <Namespace> o di un altro elemento <Type> , type_name può includere il nome del tipo senza il relativo spazio dei nomi. In caso contrario, type_name deve includere il nome completo del tipo.

Tutti gli altri attributi

Valore Descrizione
policy_setting L'impostazione da applicare a questo tipo di criteri. I valori consentiti sono All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal e Required All. Per altre informazioni, vedere Runtime Directive Policy Settings (Impostazioni dei criteri delle direttive di runtime).

Elementi figlio

Elemento Descrizione
<AttributeImplies> Se il tipo contenitore è un attributo, definisce i criteri di runtime per gli elementi del codice a cui è applicato l'attributo.
<Evento> Applica i criteri di reflection a un evento appartenente a questo tipo.
<Campo> Applica i criteri di reflection a un campo appartenente a questo tipo.
<GenericParameter> Applica i criteri al tipo di parametro di un tipo generico.
<ImpliesType> Applica criteri a un tipo, se tale criterio è stato applicato al tipo rappresentato dall'oggetto contenente l'elemento <Type>.
<Metodo> Applica i criteri di reflection a un metodo appartenente a questo tipo.
<MethodInstantiation> Applica criteri di reflection a un metodo generico costruito, appartenente a questo tipo.
<Proprietà> Applica i criteri di reflection a una proprietà appartenente a questo tipo.
<Sottotipi> Applica i criteri di runtime a tutte le classi ereditate per il tipo contenitore.
<Type> Applica criteri di reflection un tipo annidato.
<TypeInstantiation> Applica i criteri di reflection a un tipo generico costruito.

Elementi padre

Elemento Descrizione
<Applicazione> Viene usato come contenitore per i tipi e i membri dei tipi a livello di applicazione i cui metadati sono disponibili per la reflection al runtime.
<Assemblaggio> Applica i criteri di reflection a tutti i tipi in un determinato assembly.
<Libreria> Definisce l'assembly che contiene i tipi e i membri dei tipi i cui metadati sono disponibili per la reflection al runtime.
<Spazio dei nomi> Applica criteri di reflection a tutti i tipi in uno spazio dei nomi.
<Type> Applica i criteri di reflection a un tipo e a tutti i membri.
<TypeInstantiation> Applica i criteri di reflection a un tipo generico costruito e a tutti i membri.

Osservazioni:

La reflection, la serializzazione e gli attributi di interoperabilità sono facoltativi. Se non è presente, l'elemento <Type> funge da contenitore i cui tipi figlio definiscono criteri per i singoli membri.

Se un elemento <Type> è figlio di un elemento <Assembly>, <Namespace>, <Type>, o <TypeInstantiation>, sottopone a override le impostazioni dei criteri definite dall'elemento padre.

Un elemento <Type> di un tipo generico applica i relativi criteri a tutte le istanze che non dispongono di propri criteri. I criteri di tipi generici costruiti sono definiti dall'elemento <TypeInstantiation> .

Se il tipo è un tipo generico, il nome è decorato da un simbolo di accento grave (`) seguito dal relativo numero di parametri generici. Ad esempio, l'attributo Name di un elemento <Type> per la classe System.Collections.Generic.List<T> viene visualizzato come Name="System.Collections.Generic.List`1".

Esempio 1

Nell'esempio seguente viene usata la reflection per visualizzare le informazioni su campi, proprietà e metodi della classe System.Collections.Generic.List<T>. La variabile b nell'esempio è un controllo TextBlock . Poiché l'esempio recupera semplicemente le informazioni sul tipo, la disponibilità dei metadati è controllata dall'impostazione dei criteri 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;
}

Poiché i metadati per la classe List<T> non sono inclusi automaticamente dalla catena di strumenti .NET Native, l'esempio non riesce a visualizzare le informazioni sul membro richiesto in fase di esecuzione. Per fornire i metadati necessari, aggiungere il seguente elemento <Type> al file di direttive di runtime. Da notare che dal momento che è stato fornito un elemento <Namespace> padre, non è necessario fornire un nome di tipo completo nell'elemento <Type> .

<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>

Esempio 2

Nell'esempio seguente viene usata la reflection per recuperare un oggetto PropertyInfo che rappresenta la proprietà String.Chars[]. Viene quindi usato il metodo PropertyInfo.GetValue(Object, Object[]) per recuperare il valore del settimo carattere in una stringa e visualizzare tutti i caratteri nella stringa. La variabile b nell'esempio è un controllo TextBlock .

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

Poiché i metadati relativi all'oggetto String non sono disponibili, la chiamata al metodo PropertyInfo.GetValue(Object, Object[]) genera un'eccezione NullReferenceException in fase di esecuzione quando compilato con la catena di strumenti. Per eliminare l'eccezione e fornire i metadati necessari, aggiungere il seguente elemento <Type> al file di direttive di 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>

Vedi anche