一.特性的定义:
特性是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息
从本质上来说:自定义特性只是为某个目标元素提供了和一些额外的附加信息的关联,
编译器会在托管模块的元数据中嵌入这些额外的信息。
下面单纯的从C#方面 自定义一个特性并且简单应用一下:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp1.Attrbute
{
/// <summary>
/// 自定义特性
/// 1.它必须是一个类
/// 2.它必须继承Attribute【间接】
/// 3.它必须有符合业务需求的功能【就是内部的一个方法】
/// </summary>
public class AttributeDefineDemo : Attribute
{
public int Age;
public AttributeDefineDemo(int age)
{
this.Age = age;
}
public bool IsAge()
{
return this.Age >= 18 ? true : false;
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp1.Attrbute
{
[AttributeDefineDemo(15)]
public class AttributeDefineExamble
{
public void Show()
{
Console.WriteLine("年龄合法,执行通过");
}
}
}
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace ConsoleApp1.Attrbute
{
public class AttributeDefineMain
{
public static void main()
{
AttributeDefineExamble model = new AttributeDefineExamble();
// 此处用反射绑定执行后,attribute。IsAge才会被执行。否则断点调试根本不会断住
Type type = model.GetType();
if (type.IsDefined(typeof(AttributeDefineDemo),true))
{
var attribute = type.GetCustomAttribute<AttributeDefineDemo>();
if (attribute.IsAge())
{
model.Show();
}
}
model.Show();
}
}
}
特性用来充当过滤器。
在unity中的常用特性:
[DllImport]应用的方法 位于非托管代码中。在Unity中引用外部dll的目的是 方便集成一些外部插件,以便调用现有的动态链接库
[Serizlizable]
[MenuItem(“MyMenu/DoSomething”)]
[DontDestroyOnLoad]
[CustomeEditor]
[Conditional]…