Share via


<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

attribute Attributtyp BESCHREIBUNG
Name Allgemein Erforderliches Attribut. Gibt den Namen des Typs an
Activate Spiegelung Optionales Attribut. Steuert den Laufzeitzugriff auf Konstruktoren, um die Aktivierung von Instanzen zu ermöglichen.
Browse Spiegelung Optionales Attribut. Steuert das Abfragen von Informationen über Programmelemente, ermöglicht jedoch keinen Laufzeitzugriff.
Dynamic Spiegelung 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 das untergeordnete Element eines Namespace-Elements> oder eines< anderen <Type> Elements ist, kann type_name den Namen des Typs ohne dessen 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 Laufzeitanweisung.

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.
<Untertypen> 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 richtlinieneinstellungen, die vom übergeordneten Element definiert werden.

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 der Typ ein generischer Typ ist, wird sein Name durch ein Grab-Akzentsymbol (') ergänzt, gefolgt von der Anzahl generischer Parameter. 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, können im Beispiel die angeforderten Memberinformationen zur Laufzeit nicht angezeigt werden. Um die erforderlichen Metadaten bereitzustellen, fügen Sie das folgende <Type>-Element der Laufzeitanweisungsdatei hinzu. Beachten Sie, dass wir keinen vollqualifizierten Typnamen im <Type> Element angeben müssen, da wir ein übergeordnetes <Namespace-Element> bereitgestellt haben.

<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 keine Metadaten für das String Objekt verfügbar sind, löst der Aufruf der PropertyInfo.GetValue(Object, Object[]) -Methode bei der Kompilierung mit der .NET Native Toolkette zur Laufzeit eine NullReferenceException Ausnahme aus. 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>

Siehe auch