Geben Sie die erforderliche Basisklasse für .NET-Attributziele an

Ich habe versucht, ein benutzerdefiniertes .NET-Attribut mit dem folgenden Code zu erstellen, habe aber versehentlich die Unterklasse verlassen. Dies führte zu einem leicht zu behebenden Compilerfehler, der im Kommentar angezeigt wird.

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

Meine Frage ist, woher der Compiler das weiß[AttributeUsage] Attribut kann nur auf eine Unterklasse von angewendet werdenSystem.Attribute? Mit .NET Reflector sehe ich nichts Besonderes auf derAttributeUsageAttribute Klassendeklaration selbst. Leider kann dies nur ein Sonderfall sein, der vom Compiler selbst generiert wird.

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

Ich möchte angeben können, dass mein benutzerdefiniertes Attribut nur auf Unterklassen einer bestimmten Klasse (oder Schnittstelle) platziert werden kann. Ist das möglich?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage