少し告白しますが、私は属性クラスを書いたことがありません。クラスをフラグや追加機能で装飾する目的に役立つことを理解しています。
属性を作成してクラスに適用するだけでなく、別のコードブロックから属性を利用する簡単な例を教えてください。私がこれまでに見た、あらゆる形式の属性を利用する唯一のコード サンプルは、リフレクションを使用してそれを行っていましたが、リフレクションなしでそれらを使用する方法があることを常に望んでいました。
少し告白しますが、私は属性クラスを書いたことがありません。クラスをフラグや追加機能で装飾する目的に役立つことを理解しています。
属性を作成してクラスに適用するだけでなく、別のコードブロックから属性を利用する簡単な例を教えてください。私がこれまでに見た、あらゆる形式の属性を利用する唯一のコード サンプルは、リフレクションを使用してそれを行っていましたが、リフレクションなしでそれらを使用する方法があることを常に望んでいました。
属性は常にリフレクションで使用されます。それらはコンパイル時に型のメタデータに焼き付けられ、それらを読み取る唯一の方法はリフレクションを使用することです。属性は、タイプを記述し、このタイプのコンシューマーが使用できるメタデータを関連付けたい場合に使用されます。
別のコード ブロックから属性を使用する最も簡単で洗練された方法は、属性の代わりにプロパティを使用することです。
プロパティと属性の違いについては、 http://blogs.msdn.com/b/ericlippert/archive/2009/02/02/properties-vs-attributes.aspxを参照してください。
最初に属性を作成します
public class ImportableAttribute : Attribute
{
}
次に、属性を使用するアイテムを持つクラス
[ImportableAttribute]
public class ImportClass
{
[ImportableAttribute]
public string Item {get; set;}
}
次に、そのプロパティがその属性を使用しているかどうかを確認します。クラスで行うことができます..もちろん:)
PropertyInfo property = typeof(ImportClass).GetProperty("Item");
if (property.IsDefined(typeof(ImportableAttribute),true))
{
// do something
}
クラスの場合:
typeof(ImportClass).IsDefined(typeof(ImportableAttribute), true);