当前位置:首页 > 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

开通会员,享受整站包年服务立即开通 >