たとえば、プロパティと属性を持つクラスがあります。
[MyDisplay(Name = "Class name", Description = "Class description.")]
public class MyClass
{
[MyDisplay(Name = "Property name", Description = "Property description.")]
public int MyProperty { get; set; }
}
次のような属性値を取得したい
// Get type attribute...
string className = MyClass.Attributes.MyDisplay.Name;
// Get member attribute...
string propertyDescription =
MyClass.Properties.MyProperty.Attributes.MyDisplay.Description;
どうやって入手するの?MyClassの追加フィールドに属性データを自動的に入力するコードが必要です。インスタンス値のように、バインディングなどの属性値にアクセスするのは非常に便利なようです。
主な複雑さは、MyClass.AttributesコレクションとMyClass.Propertiesコレクションを、プロパティおよび属性名と同じ名前のオブジェクトで埋めることです。したがって、このコレクションは静的である必要があると思います。また、MyClass.Propertiesコレクション内の各オブジェクトには、MyClass.AttributesコレクションのようなAttributesコレクション(たとえば、MyProperty.Attributes)も必要です。