2

C# の属性がどのように機能するかを知りたいです。属性を宣言する方法または属性を作成する方法を知っています。特定の属性に対して特定の動作を生成する方法を知りたいです。リフレクションを使用する必要がありますか?

4

3 に答える 3

2

PostSharp などの AOP フレームワークを使用しない限り、コードに直接影響を与える可能性のある属性はほとんどなく、組み込みの属性にすぎません。カスタム属性に動作を追加することはできません。そのため、はい、リフレクションを使用してカスタム属性の存在をテストするか、属性を具体化する必要があります (存在を確認するだけで、具体化するよりも安価になります)。

これを頻繁に行っている場合は、メタデータが必要になるたびにリフレクションを使用する必要がないように、属性を介して取得した情報をキャッシュすることを検討することをお勧めします。

于 2013-02-25T10:14:46.700 に答える
1

はい。オブジェクト o があり、属性の存在を確認したいとします。あなたがしなければならないことは次のとおりです。

Type t = o.GetType();
        object[] attributes = t.GetCustomAttributes(typeof(MyCustomAttribute));
        if (attributes.Length>0){
            MyCustomAttribute a = attributes[0] as MyCustomAttribute;
            //use your attribute properties to customize your logic
        }
于 2013-02-25T10:15:49.260 に答える
0

はい、リフレクションを使用して、型またはメンバーにカスタム属性があるかどうかを確認します。特定の型の MyCustomAttribute インスタンスを取得するサンプルを次に示します。最初の MyCustomAttribute 宣言または null (見つからない場合) を返します。

private static MyCustomAttribute LookupMyAttribute(Type type)
{
    object[] customAttributes = type.GetCustomAttributes(typeof(MyCustomAttribute), true);
    if ((customAttributes == null) || (customAttributes.Length <= 0))
        return null;

    return customAttributes[0] as MyCustomAttribute ;
}
于 2013-02-25T10:15:03.100 に答える