国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#特性的簡單介紹

2019-11-14 15:43:27
字體:
來源:轉載
供稿:網友

 特性應該我們大多接觸過,比喻經常使用的[Obsolete],[Serializable]等下面我就主要介紹一個特性的一些用法

摘自MSDN定義:用以將元數據或聲明信息與代碼(程序集、類型、方法、屬性等)相關聯。 

意思就是把我們自定義的特性或者微軟自帶的特性和我們的代碼進行組合,其實就是為我們某些代碼附加一些信息

1:先看.Net帶的三種特性

1.1:[Obsolete]這個預定義特性標記了不應被使用的程序實體

  • 參數 message,是一個字符串,描述項目過時原因以及特帶的項目。
  • 參數 error,是一個布爾值。如果該值為 true,編譯器應把該項目的使用當作一個錯誤。默認值是 false(編譯器生成一個警告)。
                 [Obsolete("過時方法")]        PRivate static void OutModed()        {            Console.WriteLine("我是過時的方法");        }

然后引用的時候就出現

如果加上false我們發現在引用的使用就沒法編譯過去大家可以自己試驗下

1.2:[Conditional]這個預定義特性指示編譯器應忽略方法調用或屬性,除非已定義指定的條件編譯符號

  • 參數 conditionString,獲取與 ConditionalAttribute 屬性相關的條件編譯符號

 

private static void Main(string[] args)        {            Debug();            Trace();                    }        [Conditional("DEBUG")]        private static void Debug() {            Console.WriteLine("我是debug");        }        [Conditional("TRACE")]        public static void Trace()        {            Console.WriteLine("我是TRACE");        }

當調試成trace模式的時候只能結果:

1.3:[AttributeUsage]描述了如何使用一個自定義特性類。并加上限制

  • 參數AttributeTargets 指定可以對它們應用特性的應用程序元素
  • 參數allowMultiple 指示該特性是單用還是多用  默認false
  • 參數inherited是否可以繼續 默認true

創建一個自定義特性

[AttributeUsage(AttributeTargets.Method)]    public class CustomAttribute:Attribute    {        public string Name { get; set; }        public CustomAttribute(string name)        {            Name = name;        }    }

上面的限制是只能用于方法

     [Custom()]//報錯    internal class Program    {        private static void Main(string[] args)        {               }

allowMultiple = false。它規定了特性不能被重復放置多次所以下面代碼會報錯

        [Custom("1")] //報錯        [Custom("2")]        public void Method()        {        }

 2:自定義特性

先定義一個特性類

    [AttributeUsage(AttributeTargets.All,AllowMultiple = true,Inherited = false)]    public class CustomAttribute:Attribute    {        public string Name { get; set; }        public int Age { get; set; }        public CustomAttribute(string name,int age)        {            Name = name;            Age = age;        }    }

然后定義一個基類

[Custom("張三", 3)]    public class Base    {                public static void Method()        {            Console.WriteLine("我具有一個特性");        }            }
    public static void GetAttributeInfo(Type t) {            var myattribute = (CustomAttribute)Attribute.GetCustomAttribute(t, typeof(CustomAttribute));            if (myattribute!=null)            {                Console.WriteLine("姓名:{0}/n年齡:{1}", myattribute.Name, myattribute.Age);            }            }

調用

GetAttributeInfo(typeof(Base));

 

    public class Base    {            [Custom("張三", 3)]//方法上           public static void Method()        {            Console.WriteLine("我具有一個特性");        }            }

就改變t的寫法:t.GetMethod("Method")這樣來獲取特性運行效果一樣

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁德市| 酒泉市| 长汀县| 武强县| 靖江市| 伊宁市| 海淀区| 辽源市| 青冈县| 忻州市| 临夏市| 台前县| 喀喇沁旗| 郯城县| 石泉县| 信丰县| 弥勒县| 台中市| 沽源县| 章丘市| 年辖:市辖区| 东平县| 大渡口区| 肃宁县| 尚志市| 清水河县| 繁昌县| 漳浦县| 东宁县| 托克逊县| 西吉县| 偃师市| 神池县| 乐至县| 高邮市| 云梦县| 翁源县| 宜良县| 新和县| 西林县| 大冶市|