Określ wymaganą klasę podstawową dla celów atrybutu .NET

Próbowałem utworzyć niestandardowy atrybut .NET z poniższym kodem, ale przypadkowo pozostawiłem podklasę. To wygenerowało łatwy do naprawienia błąd kompilatora pokazany w komentarzu.

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

Moje pytanie brzmi, w jaki sposób kompilator zna[AttributeUsage] atrybut można zastosować tylko do podklasySystem.Attribute? Korzystając z .NET Reflector nie widzę niczego szczególnego wAttributeUsageAttribute sama deklaracja klasy. Niestety może to być specjalny przypadek wygenerowany przez sam kompilator.

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

Chciałbym móc określić, że mój atrybut niestandardowy może być umieszczony tylko na podklasach określonej klasy (lub interfejsu). czy to możliwe?

questionAnswers(3)

yourAnswerToTheQuestion