Dynamischer Zugriff auf Klassenattribute zur Laufzeit
Bei der objektorientierten Programmierung stellen Attribute zusätzliche Metadaten für Klassen und ihre Mitglieder bereit. Das Abrufen von Eigenschaftswerten zur Laufzeit ist nützlich, um auf klassenspezifische Informationen oder benutzerdefiniertes Verhalten zuzugreifen. In diesem Artikel wird eine Möglichkeit untersucht, Eigenschaftswerte zu lesen, die einer Klasse zur Laufzeit zugewiesen sind.
Angenommen, wir müssen die Eigenschaft „DomainName“ aus der Klasse „MyClass“ abrufen. Dieses Attribut ist vom Typ „DomainNameAttribute“ und hat den Wert „MyTable“. Das Ziel besteht darin, eine generische Methode zu erstellen, die diese Eigenschaft dynamisch liest und ihren Wert zurückgibt.
Hierfür können wir die .NET-Reflexionsfunktion nutzen:
<code class="language-csharp">public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute; if (dnAttribute != null) { return dnAttribute.Name; } return null; }</code>
In diesem Code verwenden wir die Methode „GetCustomAttributes“, um alle Attribute des Typs „DomainNameAttribute“ vom angegebenen Typ abzurufen. Anschließend wandeln wir das erste (und normalerweise einzige) Attribut in den Typ „DomainNameAttribute“ um. Wenn die Eigenschaft vorhanden ist, wird ihre Eigenschaft „Name“ zurückgegeben. Andernfalls geben Sie null zurück.
Mit dieser Methode können wir den Eigenschaftswert „DomainName“ zur Laufzeit dynamisch abrufen:
<code class="language-csharp">// 这应该返回 "MyTable" String DomainNameValue = GetDomainName<MyClass>();</code>
Um diese Funktionalität auf jede Eigenschaft zu verallgemeinern, können wir eine Erweiterungsmethode erstellen:
<code class="language-csharp">public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute { var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute; if (att != null) { return valueSelector(att); } return default(TValue); } }</code>
So verwenden Sie es:
<code class="language-csharp">string name = typeof(MyClass) .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
Diese verallgemeinerte Erweiterungsmethode bietet die Flexibilität, auf jede mit dem Typ verknüpfte Eigenschaft zuzugreifen, was sie zu einem vielseitigen Werkzeug zum Überprüfen von Klasseneigenschaften zur Laufzeit macht.
Das obige ist der detaillierte Inhalt vonWie kann ich zur Laufzeit dynamisch auf Klassenattribute in C# zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!