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#中的特性(Attribute)用途?

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

C#中的特性

C#中的特性

C#中的特性(Attributes)