Укажите необходимый базовый класс для целевых объектов атрибутов .NET

Я попытался создать собственный атрибут .NET с кодом ниже, но случайно остановил подкласс. Это привело к легко исправляемой ошибке компилятора, показанной в комментарии.

// results in compiler error CS0641: Attribute 'AttributeUsage' is 
// only valid on classes derived from System.Attribute
[AttributeUsage(AttributeTargets.Class)]
internal class ToolDeclarationAttribute
{
    internal ToolDeclarationAttribute()
    {
    }
}

Мой вопрос: как компилятор узнает[AttributeUsage] атрибут может быть применен только к подклассуSystem.Attribute? Используя .NET Reflector, я не вижу ничего особенного наAttributeUsageAttribute Само объявление класса. К сожалению, это может быть просто особый случай, сгенерированный самим компилятором.

[Serializable, ComVisible(true), AttributeUsage(AttributeTargets.Class, Inherited=true)]
public sealed class AttributeUsageAttribute : Attribute
{
    ...

Я хотел бы иметь возможность указать, что мой пользовательский атрибут может быть помещен только в подклассы определенного класса (или интерфейса). Это возможно?

Ответы на вопрос(3)

Ваш ответ на вопрос