zoukankan      html  css  js  c++  java
  • AttributeUsage属性

     除了定制attributes之外,可以使用Attributes属性定义如何使用这些属性。例如:

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

    强烈推荐使用AttributeUsage属性将属性文档化,因此属性的用户能直接使用已命名的属性,而不用在源代码中查找公用的读/写字段和属性。

    定义属性目标

    View Code
    public enum AttributeTargets
     2{
     3    Assembly    = 0x0001,
     4    Module      = 0x0002,
     5    Class       = 0x0004,
     6    Struct      = 0x0008,
     7    Enum        = 0x0010,
     8    Constructor = 0x0020,
     9    Method      = 0x0040,
    10    Property    = 0x0080,
    11    Field       = 0x0100,
    12    Event       = 0x0200,
    13    Interface   = 0x0400,
    14    Parameter   = 0x0800,
    15    Delegate    = 0x1000,
    16    All = Assembly │ Module │ Class │ Struct │ Enum │ Constructor │ 
    17        Method │ Property │ Field │ Event │ Interface │ Parameter │ 
    18        Delegate,
    19
    20    ClassMembers  =  Class │ Struct │ Enum │ Constructor │ Method │ 
    21        Property │ Field │ Event │ Delegate │ Interface,
    22}

    当使用Attribute属性时,能指定AttributeTargets.all(属性目标),因此属性能被附加到在枚举AttributeTargets列出的任意类型上。若未指定AttributeUsage属性,缺省值是AttributeTargets.All。属性AttributeTargets用来限制属性使用范围。

    View Code
    [AttributeUsage(AttributeTargets.Class)]
     2public class RemoteObjectAttribute : Attribute
     3{
     45}
     6
     7[AttributeUsage(AttributeTargets.Method)]
     8public class TransactionableAttribute : Attribute
     9{
    10
    11
    12
    13}

    可以使用或(|)操作符组合属性目标枚举中列出的项。

     单一用途和多用途属性

    可以使用AttributeUsage定义属性的单一用途或多用途。即确定在单个字段上使用单一属性的次数。在缺省情况下,所有属性都是单用途的。在AttributeUsage属性中,指定AllowMultipletrue,则允许属性多次附加到指定的类型上。例如:

    View Code
    [AttributeUsage(AttributeTargets.All, AllowMultiple=true)]
     2public class SomethingAttribute : Attribute
     3{
     4    public SomethingAttribute(String str)
     5    {
     6    }
     7}
     8
     9[Something("abc")]
    10[Something("def")]
    11class MyClass
    12{
    13}

    指定继承属性规则

       在AttributeUsageAttribute属性的最后部分是继承标志,用于指定属性是否能被继承。缺省值是false。然而,若继承标志被设置为true,它的含义将依赖于AllowMultiple标志的值。若继承标志被设置为true,并且AllowMultiple标志是flag,则改属性将忽略继承属性。若继承标志和AllowMultiple标志都被设置为true,则改属性的成员将与派生属性的成员合并。范例:

    View Code
    using System;
     2using System.Reflection;
     3
     4namespace AttribInheritance
     5{
     6    [AttributeUsage(
     7        AttributeTargets.All, 
     8        AllowMultiple = true,
     9        //AllowMultiple = false,
    10        Inherited = true
    11    )]
    12    public class SomethingAttribute : Attribute
    13    {
    14        private string name;
    15        public string Name
    16        { 
    17            get { return name; }
    18            set { name = value; }
    19        }
    20
    21        public SomethingAttribute(string str)
    22        {
    23            this.name = str;
    24        }
    25    }
    26
    27     [Something("abc")]
    28    class MyClass
    29    {
    30    }
    31
    32    [Something("def")]
    33    class Another : MyClass
    34    {
    35    }
    36
    37    class Test
    38    {
    39        [STAThread]
    40        static void Main(string[] args)
    41        {
    42            Type type =
    43                Type.GetType("AttribInheritance.Another");
    44            foreach (Attribute attr in type.GetCustomAttributes(true))
    45                //type.GetCustomAttributes(false))
    46            {
    47                SomethingAttribute sa = 
    48                    attr as SomethingAttribute;
    49                if (null != sa)
    50                {
    51                    Console.WriteLine(
    52                        "Custom Attribute: {0}", 
    53                        sa.Name);
    54                }
    55            }
    56
    57        }
    58    }
    59}

    AllowMultiple设置为false,结果是:

    Custom Attribute: def

     AllowMultiple设置为true,结果是:

    Custom Attribute: def

    Custom Attribute: abc

  • 相关阅读:
    spark-submit python egg 解决三方件依赖问题
    怎样制作一个 Python Egg
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月23日)
    2016最新住房贷款利率,首套房利率,二套房利率,公积金贷款利率--利率表
    xgboost: 速度快效果好的boosting模型
    苏州Uber优步司机奖励政策(4月22日)
    北京Uber优步司机奖励政策(4月22日)
    成都Uber优步司机奖励政策(4月22日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月22日)
    苏州Uber优步司机奖励政策(4月21日)
  • 原文地址:https://www.cnblogs.com/douqiumiao/p/3003691.html
Copyright © 2011-2022 走看看