Especifique la clase base requerida para los destinos de atributo .NET

Intenté crear un atributo .NET personalizado con el siguiente código, pero accidentalmente lo dejé fuera de la subclase. Esto generó un error de compilación fácil de corregir que se muestra en el comentario.

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

Mi pregunta es ¿cómo sabe el compilador el[AttributeUsage] atributo solo se puede aplicar a una subclase deSystem.Attribute? Usando .NET Reflector no veo nada especial en elAttributeUsageAttribute declaración de clase en sí. Desafortunadamente, esto podría ser un caso especial generado por el compilador.

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

Me gustaría poder especificar que mi atributo personalizado solo se puede colocar en subclases de una clase particular (o interfaz). es posible?

Respuestas a la pregunta(3)

Su respuesta a la pregunta