国产探花免费观看_亚洲丰满少妇自慰呻吟_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")這樣來獲取特性運行效果一樣

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 夏河县| 桂林市| 格尔木市| 吉木萨尔县| 靖西县| 和田县| 翁牛特旗| 濉溪县| 敦煌市| 白银市| 麻栗坡县| 遂川县| 临高县| 上栗县| 申扎县| 嘉善县| 兴国县| 云龙县| 廉江市| 平顺县| 滕州市| 台前县| 八宿县| 崇信县| 柞水县| 景洪市| 兴化市| 洛浦县| 弥渡县| 焦作市| 冕宁县| 老河口市| 易门县| 尤溪县| 松原市| 萨迦县| 轮台县| 温州市| 利川市| 金溪县| 乐清市|