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

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

一:前言

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


二:使用

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

#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特性的第二個參數(shù)是否為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類
——將定位的參數(shù)通過構造函數(shù)傳遞(每個自定義特性類必須至少有一個構造函數(shù))
——通過反射檢索到特性信息

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

開通會員,享受整站包年服務立即開通 >