NET 特性(Attribute)

特性(Attribute)是用於在運行時傳遞程序中各類元素(好比類、方法、結構、枚舉、組件等)的行爲信息的聲明性標籤。html

您能夠經過使用特性向程序添加聲明性信息。一個聲明性標籤是經過放置在它所應用的元素前面的方括號([ ])來描述的。數組

特性(Attribute)用於添加元數據,如編譯器指令和註釋、描述、方法、類等其餘信息。框架

.Net 框架提供了兩種類型的特性:預約義特性和自定義特性。spa

 

1.自定義特性:Net 框架容許建立自定義特性,用於存儲聲明性的信息,且可在運行時被檢索。該信息根據設計標準和應用程序須要,可與任何目標元素相關。設計

建立並使用自定義特性包含四個步驟:code

  • 聲明自定義特性
  • 構建自定義特性
  • 在目標程序元素上應用自定義特性
  • 經過反射訪問特性
    /// <summary>
    /// 別名特性
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
    public class AliasAttribute : Attribute
    {
        /// <summary>
        /// 別名
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 別名類型
        /// </summary>
        public Type Type { get; set; }

        /// <summary>
        /// 別名名稱,類型默認爲string
        /// </summary>
        /// <param name="name"></param>
        public AliasAttribute(string name)
        {
            Name = name;
            Type = typeof(string);
        }

        /// <summary>
        /// 別名名稱,類型爲傳入類型
        /// </summary>
        /// <param name="name"></param>
        public AliasAttribute(string name, Type type)
        {
            Name = name;
            Type = type;
        }
    }

2.在目標程序元素上應用自定義特性htm

    public class UserDto
    {
        /// <summary>
        /// 姓名
        /// </summary>
        [Alias("name", typeof(string))]
        public string Name { get; set; }

        /// <summary>
        /// 電話
        /// </summary>
        [Alias("phone", typeof(string))]
        public string Phone { get; set; }

        /// <summary>
        /// 備註
        /// </summary>
        [Alias("remark", typeof(string))]
        public string Remark { get; set; }
    }

3.經過反射訪問特性blog

            //  獲取type
            var userType = typeof(UserDto);
            //  獲取類中全部公共屬性集合
            var PropertyArr = userType.GetProperties();
            foreach (var itemProperty in PropertyArr)
            {
                //  獲取屬性上存在AliasAttribute的數組
                var customAttributesArr = itemProperty.GetCustomAttributes(typeof(AliasAttribute), true);
                if (customAttributesArr.Any())
                {
                    //  獲取特性
                    var first = customAttributesArr.FirstOrDefault();
                }
                else {
                    //  不存在特性
                }
            }
相關文章
相關標籤/搜索