• 當前位置:首頁 > IT技術 > Windows編程 > 正文

    C#中的特性
    2021-08-07 23:34:56

    一:前言

    通過特性與代碼(程序集、類型、方法、屬性等)相關聯。特性與程序實體關聯后,即可在運行時使用反射技術查詢特性
    可以通過使用特性向程序添加聲明性信息,一個聲明性標簽是通過放置在它所應用的元素前面的方括號[ ]來描述的


    二:使用

    ——Conditional
    可以為一個方法添加Conditional特性使這個方法的執行依賴于指定的預處理標識符

    #define Debug
    
    using System;
    using System.Diagnostics;
    
    class MainClass
    {
        public static void Main()
        {
            Fun1();
            Fun2();
        }
    
        [Conditional("Debug")]
        public static void Fun1()
        {
            Console.WriteLine("Fun1");
        }
    
        public static void Fun2()
        {
            Console.WriteLine("Fun2");
        }
    }

    ?

    ?

    ——Obsolete
    可以為類、屬性、字段、方法添加Obsolete特性使這個目標元素標記為過時的
    Obsolete特性的第二個參數是否為error默認為false,不影響編譯通過只會提示warning,如果為true則編譯不會通過

    public class Test
    {
        [Obsolete]
        public int a;
    
        [Obsolete("use a instead")]
        public int b;
    
        [Obsolete("", true)]
        public void Fun(){}
    }

    ?

    ?

    ——自定義特性
    步驟:
    ——構建一個自定義特性[AttributeUsage()]
    ——編寫一個自定義特性類,類名必須以Attribute結尾并繼承自Attribute類
    ——將定位的參數通過構造函數傳遞(每個自定義特性類必須至少有一個構造函數)
    ——通過反射檢索到特性信息

    using System;
    
    class MainClass
    {
        public static void Main()
        {
            Test test = new Test();
            Type t = test.GetType();
            object[] o = t.GetCustomAttributes(true);
            TestAttribute attribute = (TestAttribute)o[0];
            Console.WriteLine(attribute.msg);
        }
    }
    
    [Test("這是測試類")]
    public class Test { }
    
    [AttributeUsage(AttributeTargets.All)]
    public class TestAttribute : Attribute
    {
        public string msg;
    
        public TestAttribute(string msg)
        {
            this.msg = msg;
        }
    }

    ?

    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码