Как реализован AttributeUsageAtribute? - PullRequest
3 голосов
/ 12 ноября 2011

У меня вопрос из двух частей.

Во-первых, как говорится в заголовке, кто-нибудь знает, как реализован AttributeUsageAtribute?Он может быть применен только к классу, производному от Attribute, и если нет, он выдаст ошибку с: Attribute 'AttributeUsage' действителен только для классов, производных от System.Attribute

Во-вторых, я могу написать аналогичный атрибутчто может быть применено к классам, которые являются производными от определенного класса или реализуют определенный интерфейс?

1 Ответ

2 голосов
/ 12 ноября 2011

1) это зависит от компилятора

2) вы можете попробовать следующий трюк:

var attributes = typeof(A).GetCustomAttributes(A.GetDerivedFromAOnlyAttributeType(), false);
// using an attribute outside the A class

class A {
    protected class DerivedFromAOnlyAttribute : Attribute { }
    public static Type GetDerivedFromAOnlyAttributeType() {
        return typeof(DerivedFromAOnlyAttribute);
    }
}
[A.DerivedFromAOnly] //ok
class B : A {
}
[A.DerivedFromAOnly] //error
class C { 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...