Specify required base class for .NET attribute targets

后端 未结 3 438
孤独总比滥情好
孤独总比滥情好 2020-12-10 04:54

I tried to create a custom .NET attribute with the code below but accidentally left off the subclass. This generated an easily-fixed compiler error shown in the comment.

3条回答
  •  渐次进展
    2020-12-10 05:31

    I would like to be able to specify that my custom attribute can only be placed on subclasses of a particular class (or interface). Is this possible?

    Actually, there is a way to do this for subclasses (but not interfaces) using protected - see Restricting Attribute Usage. To reproduce the code (but not the discussion):

    abstract class MyBase {
        [AttributeUsage(AttributeTargets.Property)]
        protected sealed class SpecialAttribute : Attribute {}
    }
    class ShouldBeValid : MyBase {
        [Special] // works fine
        public int Foo { get; set; }
    }
    class ShouldBeInvalid { // not a subclass of MyBase
        [Special] // type or namespace not found
        [MyBase.Special] // inaccessible due to protection level
        public int Bar{ get; set; }
    }
    

提交回复
热议问题