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?