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:
public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute; if (dnAttribute != null) { return dnAttribute.Name; } return null; }
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:
// 这应该返回 "MyTable" String DomainNameValue = GetDomainName<MyClass>();
Um diese Funktionalität auf jede Eigenschaft zu verallgemeinern, können wir eine Erweiterungsmethode erstellen:
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); } }
So verwenden Sie es:
string name = typeof(MyClass) .GetAttributeValue((DomainNameAttribute dna) => dna.Name);
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!