Freigeben über


<Type-Element (.NET Native)>

Wendet eine Laufzeitrichtlinie auf einen bestimmten Typ an, z. B. eine Klasse oder Struktur.

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

Attribute und Elemente

In den folgenden Abschnitten werden Attribute sowie untergeordnete und übergeordnete Elemente beschrieben.

Attribute

Attribut Attributtyp Beschreibung
Name Allgemein Erforderliches Attribut. Gibt den Namen des Typs an
Activate Reflexion Optionales Attribut. Steuert den Laufzeitzugriff auf Konstruktoren, um die Aktivierung von Instanzen zu ermöglichen.
Browse Reflexion Optionales Attribut. Steuert das Abfragen von Informationen über Programmelemente, ermöglicht jedoch keinen Laufzeitzugriff.
Dynamic Reflexion Optionales Attribut. Steuert den Laufzeitzugriff auf alle Typmember, einschließlich Konstruktoren, Methoden, Felder, Eigenschaften und Ereignisse, um die dynamische Programmierung zu ermöglichen.
Serialize Serialisierung Optionales Attribut. Steuert den Laufzeitzugriff auf Konstruktoren, Felder und Eigenschaften, um Serialisierung und Deserialisierung von Typinstanzen durch Bibliotheken wie das Newtonsoft JSON-Serialisierungsprogramm zu ermöglichen.
DataContractSerializer Serialisierung Optionales Attribut. Steuert die Richtlinie für die Serialisierung, die die System.Runtime.Serialization.DataContractSerializer-Klasse verwendet.
DataContractJsonSerializer Serialisierung Optionales Attribut. Steuert die Richtlinie für die JSON-Serialisierung, die die System.Runtime.Serialization.Json.DataContractJsonSerializer-Klasse verwendet.
XmlSerializer Serialisierung Optionales Attribut. Steuert die Richtlinie für die XML-Serialisierung, die die System.Xml.Serialization.XmlSerializer-Klasse verwendet.
MarshalObject Interop Optionales Attribut. Steuert die Richtlinie für das Marshalling von Verweistypen zu Windows-Runtime und COM.
MarshalDelegate Interop Optionales Attribut. Steuert die Richtlinie für das Marshalling von Delegattypen als Funktionszeiger zu systemeigenem Code.
MarshalStructure Interop Optionales Attribut. Steuert die Richtlinie für das Marshalling von Werttypen zu systemeigenem Code.

Namensattribut

Wert Beschreibung
type_name Der Typname. Wenn dieses <Type> Element entweder ein <Namespace-Element> oder ein anderes <Type> Element ist, kann type_name den Namen des Typs ohne den Namespace einschließen. Andernfalls muss type_name den vollqualifizierten Typnamen enthalten.

Alle anderen Attribute

Wert Beschreibung
policy_setting Die Einstellung, die auf diesen Richtlinientyp angewendet werden soll. Mögliche Werte sind All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal und Required All. Weitere Informationen finden Sie unter Richtlinieneinstellungen für die Laufzeitanweisungen.

Untergeordnete Elemente

Element Beschreibung
<AttributeImplies> Wenn der enthaltende Typ ein Attribut ist, wird die Laufzeitrichtlinie für Codeelemente definiert, auf die das Attribut angewendet wird.
<Ereignis> Wendet die Reflektionsrichtlinie auf ein Ereignis dieses Typs an.
<Feld> Wendet die Reflektionsrichtlinie auf ein Feld dieses Typs an.
<GenericParameter> Wendet eine Richtlinie auf den Parametertyp eines generischen Typs an.
<ImpliesType> Wendet eine Richtlinie auf einen Typ an, wenn diese Richtlinie an den Typ angewendet wurde, der vom enthaltenden <Type>-Element dargestellt wird.
<Methode> Wendet die Reflektionsrichtlinie auf eine Methode dieses Typs an.
<MethodInstantiation> Wendet die Reflektionsrichtlinie auf eine konstruierte generische Methode dieses Typs an.
<Eigenschaft> Wendet die Reflektionsrichtlinie auf eine Eigenschaft dieses Typs an.
<Subtypen> Wendet eine Laufzeitrichtlinie auf alle vom enthaltenden Typ geerbten Klassen an.
<Type> Wendet die Reflektionsrichtlinie auf einen geschachtelten Typ an.
<TypeInstantiation> Wendet die Reflektionsrichtlinie auf einen konstruierten generischen Typ an.

Übergeordnete Elemente

Element Beschreibung
<Anwendung> Dient als Container für anwendungsweite Typen und Typmember, deren Metadaten zur Laufzeit für die Reflektion verfügbar sind.
<Assembly> Wendet die Reflektionsrichtlinie auf alle Typen in einer angegebenen Assembly an.
<Bibliothek> Definiert die Assembly, die Typen und Typmember enthält, deren Metadaten zur Laufzeit für die Reflektion verfügbar sind.
<Namespace> Wendet die Reflektionsrichtlinie auf alle Typen in einem Namespace an.
<Type> Wendet die Reflektionsrichtlinie auf einen Typ und alle seine Member an.
<TypeInstantiation> Wendet die Reflektionsrichtlinie auf einen konstruierten generischen Typ und alle seine Member an.

Hinweise

Die Reflektions-, Serialisierungs- und Interop-Attribute sind optional. Wenn keine vorhanden sind, dient das <Type>-Element als Container, dessen untergeordneten Typen Richtlinie für einzelne Member definieren.

Wenn ein <Type> Element das untergeordnete Element eines <Assembly>-, <Namespace<Type>>- oder< TypeInstantiation-Elements> ist, überschreibt es die vom übergeordneten Element definierten Richtlinieneinstellungen.

Ein <Type>-Element eines generischen Typs wendet seine Richtlinie auf alle Instanziierungen an, die keine eigene Richtlinie haben. Die Richtlinie der konstruierten generischen Typen wird durch das <TypeInstantiation-Element> definiert.

Wenn es sich bei dem Typ um einen generischen Typ handelt, wird der Name durch ein Gravis-Akzentsymbol (') gefolgt von der Anzahl generischer Parameter versehen. Das Name-Attribut eines <Type>-Elements wird für die System.Collections.Generic.List<T>-Klasse beispielsweise als Name="System.Collections.Generic.List`1" angezeigt.

Beispiel 1

Im folgenden Beispiel wird Reflektion zum Anzeigen von Informationen zu den Feldern, Eigenschaften und Methoden der System.Collections.Generic.List<T>-Klasse verwendet. Die Variable b im Beispiel ist ein TextBlock Steuerelement. Da im Beispiel einfach Typinformationen abgerufen werden, wird die Verfügbarkeit von Metadaten über die Browse-Richtlinieneinstellung gesteuert.

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

Da Metadaten für die List<T> Klasse nicht automatisch von der .NET Native-Toolkette eingeschlossen werden, wird im Beispiel die angeforderten Memberinformationen zur Laufzeit nicht angezeigt. Um die erforderlichen Metadaten bereitzustellen, fügen Sie das folgende <Type>-Element der Laufzeitanweisungsdatei hinzu. Beachten Sie, dass wir, da wir ein übergeordnetes <Namespace-Element> bereitgestellt haben, keinen vollqualifizierten Typnamen im <Type> Element angeben müssen.

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

Beispiel 2

Im folgenden Beispiel wird Reflektion zum Abrufen eines PropertyInfo-Objekts verwendet, das die String.Chars[]-Eigenschaft darstellt. Anschließend wird mithilfe der PropertyInfo.GetValue(Object, Object[])-Methode der Wert des siebten Zeichens in einer Zeichenfolge abgerufen, und alle Zeichen in der Zeichenfolge werden angezeigt. Die Variable b im Beispiel ist ein TextBlock Steuerelement.

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

Da Metadaten für das String Objekt nicht verfügbar sind, löst der Aufruf der PropertyInfo.GetValue(Object, Object[]) Methode zur Laufzeit eine NullReferenceException Ausnahme aus, wenn sie mit der .NET Native-Toolkette kompiliert wird. Fügen Sie folgendes <Type>-Element zur Laufzeitanweisungsdatei hinzu, um die Ausnahme zu eliminieren und die erforderlichen Metadaten bereitzustellen:

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

Weitere Informationen