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?