unity基础学习十一,C#高级属性:特性
C# 特性(Attribute)
特性,是用来给代码添加额外信息的一种手段,我们通常是将特性标记到方法、类或者属性上,在使用的这些结构的时候,通过反射这一非常高级的技术,获取它们通过特性标记的信息(在编译好的程序集中,作为元数据),从而进行某些特殊的处理。
.Net 框架提供了两种类型的特性:预定义特性和自定义特性。
规定特性(Attribute)
规定特性(Attribute)的语法如下:
[attribute(positional_parameters, name_parameter = value, ...)] element 使用:
特性的使用很简单,在结构声明的上一行,用"[]"扩起特性类名即可:
系统也给我们提供了一些特性,比如Serializable 标记一个可序列化的类,DebuggerStepThrough设置方法在调试时为跳过的状态。
[Serializable] class Sunshine{...} 它其实是省略了(),如果使用特性的其它的构造函数传递(每个自定义特性类必须至少有一个构造函数)
预定义特性
Conditional
可以为一个方法添加Conditional特性使这个方法的执行依赖于指定的标识符
规定该特性的语法如下:
[Conditional( conditionalSymbol )] 使用案例:
#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特性使这个目标元素标记为过时的<br> Obsolete特性的第二个参数是否为error默认为false,不影响编译通过只会提示warning,如果为true则编译不会通过
规定该特性的语法如下:
[Obsolete( message )] [Obsolete( message, iserror )] - 参数
message,是一个字符串,描述项目为什么过时以及该替代使用什么。 - 参数
iserror,是一个布尔值。如果该值为 true,编译器应把该项目的使用当作一个错误。默认值是 false(编译器生成一个警告)。
using System; public class MyClass { [Obsolete("Don't use OldMethod, use NewMethod instead", true)] static void OldMethod() { Console.WriteLine("It is the old method"); } static void NewMethod() { Console.WriteLine("It is the new method"); } public static void Main() { OldMethod(); } } 当您尝试编译该程序时,编译器会给出一个错误消息说明: Don't use OldMethod, use NewMethod instead