Attribute特性3——自定义特性AttributeUsage

8 篇文章 0 订阅
8 篇文章 0 订阅

Attribute特性3——自定义特性AttributeUsage

AttributeUsage
预定义特性 AttributeUsage 描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。

规定该特性的语法如下:

[AttributeUsage(
validon,
AllowMultiple=allowmultiple,
Inherited=inherited
)]
其中:

参数 validon 规定特性可被放置的语言元素。它是枚举器 AttributeTargets 的值的组合,设置多个AttributeTargets 可以用 | 分隔,如AttributeTargets.Class | AttributeTargets.。默认值是 AttributeTargets.All。
参数 allowmultiple(可选的)为该特性的 AllowMultiple 属性(property)提供一个布尔值。如果为 true,则该特性是多用的。默认值是 false(单用的)。
参数 inherited(可选的)为该特性的 Inherited 属性(property)提供一个布尔值。如果为 true,则该特性可被派生类继承。默认值是 false(不被继承)。

我们先看看AttributeUsage特性,您会注意到validon参数是一个定位的(必需的)参数。这个参数使您的特性都能附加给哪些类型。确切地说,AttributeUsage特性中的validon参数是AttributeTargets类型的,它事实上是按如下方式定义的一种枚举:

	//
    // 摘要:
    //     指定可应用属性的应用程序元素。
    [ComVisible(true)]
    [Flags]
    public enum AttributeTargets
    {
        //
        // 摘要:
        //     可以对程序集应用属性。
        Assembly = 1,
        //
        // 摘要:
        //     可以对模块应用属性。
        Module = 2,
        //
        // 摘要:
        //     可以对类应用属性。
        Class = 4,
        //
        // 摘要:
        //     可以对结构应用属性,即值类型。
        Struct = 8,
        //
        // 摘要:
        //     可以对枚举应用属性。
        Enum = 16,
        //
        // 摘要:
        //     可以对构造函数应用属性。
        Constructor = 32,
        //
        // 摘要:
        //     可以对方法应用属性。
        Method = 64,
        //
        // 摘要:
        //     可以对属性 (Property) 应用属性 (Attribute)。
        Property = 128,
        //
        // 摘要:
        //     可以对字段应用属性。
        Field = 256,
        //
        // 摘要:
        //     可以对事件应用属性。
        Event = 512,
        //
        // 摘要:
        //     可以对接口应用属性。
        Interface = 1024,
        //
        // 摘要:
        //     可以对参数应用属性。
        Parameter = 2048,
        //
        // 摘要:
        //     可以对委托应用属性。
        Delegate = 4096,
        //
        // 摘要:
        //     可以对返回值应用属性。
        ReturnValue = 8192,
        //
        // 摘要:
        //     可以对泛型参数应用属性。
        GenericParameter = 16384,
        //
        // 摘要:
        //     可以对任何应用程序元素应用属性。
        All = 32767
    }

第二个参数AllowMultiple:false|true是否允许多次特性,使用哪种形式取决于一个单的特性在一段单独的字段里的使用次数。在默认形式下,所有的特性都是单次的,如下代码所示,会出现一个错误:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public class ClassAttribute : Attribute
{

}

 // 错误 CS0579	“Class”特性重复 
[Class]
[Class]
public class test
{

}

第三个参数Inherited:false|true ,参数 inherited(可选的)为该特性的 Inherited 属性(property)提供一个布尔值。如果为 true,则该特性可被派生类继承。默认值是 false(不被继承)。

PS:我是青春代码,山高路远,江湖再见。

友情提示:转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值