當(dāng)前位置:首頁(yè) > IT技術(shù) > Windows編程 > 正文

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

一:前言

通過(guò)特性與代碼(程序集、類(lèi)型、方法、屬性等)相關(guān)聯(lián)。特性與程序?qū)嶓w關(guān)聯(lián)后,即可在運(yùn)行時(shí)使用反射技術(shù)查詢(xún)特性
可以通過(guò)使用特性向程序添加聲明性信息,一個(gè)聲明性標(biāo)簽是通過(guò)放置在它所應(yīng)用的元素前面的方括號(hào)[ ]來(lái)描述的


二:使用

——Conditional
可以為一個(gè)方法添加Conditional特性使這個(gè)方法的執(zhí)行依賴(lài)于指定的預(yù)處理標(biāo)識(shí)符

#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
可以為類(lèi)、屬性、字段、方法添加Obsolete特性使這個(gè)目標(biāo)元素標(biāo)記為過(guò)時(shí)的
Obsolete特性的第二個(gè)參數(shù)是否為error默認(rèn)為false,不影響編譯通過(guò)只會(huì)提示warning,如果為true則編譯不會(huì)通過(guò)

public class Test
{
    [Obsolete]
    public int a;

    [Obsolete("use a instead")]
    public int b;

    [Obsolete("", true)]
    public void Fun(){}
}

?

?

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

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("這是測(cè)試類(lèi)")]
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

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >