【发布时间】:2010-11-14 12:11:58
【问题描述】:
我尝试使用下面的代码创建自定义 .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
{
...
我希望能够指定我的自定义属性只能放置在特定类(或接口)的子类上。这可能吗?
【问题讨论】:
-
此限制有时表明您应该改用标记接口。它执行相同的功能,除非您需要将类级元数据作为参数传递。因此,如果实例可以很容易地提供一些东西的计数,那么接口可能需要一个公共属性来获取它。如果它必须是类级别的,那么你就会被 Attributes 困住。
标签: c# .net attributes custom-attributes