Freigeben über


<ImpliesType-Element> (.NET Native)

Wendet eine Richtlinie auf einen Typ an, wenn diese Richtlinie auf den enthaltenden Typ oder die enthaltende Methode angewendet wurde.

Syntax

<ImpliesType 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 sich der von diesem <ImpliesType>-Element dargestellte Typ im selben Namespace wie das enthaltende <Type>-Element befindet, kann type_name den Namen des Typs ohne den Namespace umfassen. 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

Keine

Übergeordnete Elemente

Element Beschreibung
<Typ> 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.
<Methode> Wendet die Reflektionsrichtlinie auf eine Methode an.

Hinweise

Das <ImpliesType>-Element dient in erster Linie der Verwendung durch Bibliotheken. Es wird in folgendem Szenario eingesetzt:

  • Wenn eine Routine einen Typ reflektieren muss, muss sie unbedingt einen zweiten Typ reflektieren.

  • Die Metadaten für die implizite Instanziierung des zweiten Typs ist andernfalls nicht verfügbar, da die statische Analyse nicht angibt, dass dies erforderlich ist.

In den meisten Fällen sind die beiden Typen generische Instanziierungen mit freigegebenen Typargumenten.

Das <ImpliesType>-Element wurde unter der Annahme definiert, dass die Notwendigkeit einer Reflektion für den Typ, der von seinem übergeordneten Element angegebenen wird, eine Notwendigkeit einer Reflektion für den Typ impliziert, der vom <ImpliesType>-Element angegeben wird. Die folgenden Reflektionsrichtlinien gelten z. B. für zwei Typen – Explicit<T> und Implicit<T>.

<Type Name="Explicit{ET}">
    <ImpliesType Name="Implicit{ET}" Dynamic="Required Public" />
</Type>

Diese Anweisung hat nur dann Auswirkungen, wenn eine Instanziierung von Explicit über eine definierte Dynamic-Richtlinieneinstellung verfügt. Wenn das z. B. für Explicit<Int32> der Fall ist, wird Implicit<Int32> mit den öffentlichen Membern instanziiert, und ihre Metadaten werden für die dynamische Programmierung verfügbar gemacht.

Folgendes ist ein praktisches Beispiel, das für mindestens ein Serialisierungsprogramm gilt. Die Anweisungen erkennen den Bedarf, dass die Reflektion von etwas, das als IList<something> typisiert ist, auch die Reflektion des entsprechenden List<something>-Typs umfasst, ohne dass anwendungsbasierte Anmerkungen erforderlich sind.

<Type Name="System.Collections.Generic.IList{T}">
   <ImpliesType Name="System.Collections.Generic.List{T}" Serialize="Public" />
</Type>

Das <ImpliesType>-Element kann auch innerhalb eines <Method>-Element angezeigt werden, da in einigen Fällen das Instanziieren einer generischen Methode die Reflektion einer Typinstanziierung impliziert. Stellen Sie sich zum Beispiel eine generische Methode IEnumerable<T> MakeEnumerable<T>(string spelling, T defaultValue) vor, auf die eine angegebene Bibliothek zusammen mit den zugehörigen List<T>- und Array-Typen dynamisch zugreift. Dies kann folgendermaßen ausgedrückt werden:

<Type Name="MyType">
    <Method Name="MakeEnumerable{T}" Signature="(System.String, T)" Dynamic="Included">
        <ImpliesType Name="T[]" Dynamic="Public" />
        <ImpliesType Name="System.Collections.Generic.List{T}" Dynamic="Public" />
    </Method>
</Type>

Weitere Informationen