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#中的特性的主要内容,如果未能解决你的问题,请参考以下文章