特性Attribute

  • 元数据

元数据是关于数据的组织、数据域及其关系的信息,简言之,元数据就是描述其它数据的数据

元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存中的程序进行描述。将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中,而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另一部分中。在模块或程序集中定义和引用的每个类型和成员都将在元数据中进行说明。当执行代码时,运行库将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。

  • 特性(Attribute)

用于添加元数据(描述数据的数据)的一种机制,如编译器指令和注释、描述、方法、类等其他信息,通过它可以给编译器提供指示或者提供对数据的说明

特性是一个对象,它可以加载到程序集及程序集的对象中,这些对象包括 程序集本身、模块、类、接口、结构、构造函数、方法、方法参数等,加载了特性的对象称作特性的目标。

  • .Net 框架提供了两种类型的特性:预定义特性和自定义特性。
  • 特性的使用

[AttributeName]或[AttributeName(Args)]或[AttributeName(Args,Field=value)]

  • 如果通过“转到定义”查看一些基类的代码,你会看到很多特性的应用实例。
    实质上特性的本质也是类,一般自定义特性都是继承了System.Attribute的类,特性使用时传入的参数是构造函数的参数,与构造函数相同,特性也可以有多种重载。
    没有参数时可以省略小括号。
    对于属性,采用“属性=值”这样的格式,它们之间用逗号分隔。
  • 自定义特性
    已知自定义特性都继承了System.Attribute,并且定制的特性还需用另一特性AttributeUsage来进行设置。
  • Unity中的特性
    特性在Unity中的使用,我们熟知的主要是编辑器扩展,编辑器扩展的好处很多就不一一道来,这里说下用于编辑器扩展的一些常用特性。
    Unity中可能使用到的特效在命名空间System、UnityEngine、UnityEditor下都有。
    如: System下的Serializable ,NonSerialized,AttributeUsage
    UnityEngine下的 AddComponentMenu , ContextMenu
    UnityEditor下的 MenuItem ,CustomEditor
    关于特性的说明可以参照Unity官方文档 UnityEngine及UnityEditor下Attributes这一栏。
  • 自定义编辑器
    需要注意,使用CustomEditor并且继承Editor来进行自定义编辑器时,需要在Assets下创建一个Editor文件夹,这是Unity默认的文件路径。

关于自定义特性及自定义编辑器后面应用篇再进行记录。