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