C#中的特性

Posted Hello Bug.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的特性相关的知识,希望对你有一定的参考价值。

一:前言

通过特性与代码(程序集、类型、方法、属性等)相关联。特性与程序实体关联后,即可在运行时使用反射技术查询特性
可以通过使用特性向程序添加声明性信息,一个声明性标签是通过放置在它所应用的元素前面的方括号[ ]来描述的


二:使用

——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;
    }
}

以上是关于C#中的特性的主要内容,如果未能解决你的问题,请参考以下文章

C# 最有用的(自定义)代码片段是啥? [关闭]

c#代码片段快速构建代码

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

是否可以动态编译和执行 C# 代码片段?

C#常用代码片段备忘

C#中的 特性 详解(转载)