以下のコードでカスタム .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
かです。AttributeUsageAttribute
.NET Reflector を使用しても、クラス宣言自体に特別なことは何もありません。残念ながら、これはコンパイラ自体によって生成された特殊なケースにすぎない可能性があります。
[Serializable, ComVisible(true), AttributeUsage(AttributeTargets.Class, Inherited=true)]
public sealed class AttributeUsageAttribute : Attribute
{
...
カスタム属性を特定のクラス (またはインターフェイス) のサブクラスにのみ配置できるように指定できるようにしたいと考えています。これは可能ですか?