我尝试使用下面的代码创建自定义 .NET 属性,但不小心遗漏了子类。这产生了注释中显示的易于修复的编译器错误。
// results in compiler error CS0641: Attribute 'AttributeUsage' is
// only valid on classes derived from System.Attribute
[AttributeUsage(AttributeTargets.Class)]
internal class ToolDeclarationAttribute
{
internal ToolDeclarationAttribute()
{
}
}
我的问题是编译器如何知道该[AttributeUsage]
属性只能应用于 的子类System.Attribute
?使用 .NET Reflector 我看不到AttributeUsageAttribute
类声明本身有什么特别之处。不幸的是,这可能只是编译器本身生成的一种特殊情况。
[Serializable, ComVisible(true), AttributeUsage(AttributeTargets.Class, Inherited=true)]
public sealed class AttributeUsageAttribute : Attribute
{
...
我希望能够指定我的自定义属性只能放在特定类(或接口)的子类上。这可能吗?