Attribute是自定义特性,表示的是这个属性、方法、接口特殊的地方;是用来给编译器看的一个特性
具体可参考MSDN
这个特性不在官方的特性中,它肯定是自定义的一个特性;所以这个的意思你需要按F12从它的定义中查找
网上有一个和你这个特性一样的代码
作者说是表示Key的主键特性
但其实微软已经定义好一个表示主键的特性了,你可以看看这个;所以作者应该对C#不太精通
在C#中使用[]的情况有两种,一种就是索引器的方式,如果数组等,例如:
string ms = "abcdefg";
char c = ms[0]; // 索引器,索引器一般括号内为数字或字符串之类的
另一个情况就是编程中所使用到的特性化编程,也就楼主所问的这种,我们统称为“特性化”。其实在括号内是一个特性化类。
先介绍一下特性化类的特点:
所有的特性化类均继承于System.Attribute类,在.net类库中存在诸多这样的类,也可以自定这个样的类,自定时一般命名的方式为XXXXXAttribute的形式。其作用方式可以作用到类或属性或方法上。而所有的Attribute泛化类均被特为“特性”或“特性类”。其作用是指示其外的附加信息,在运行类(由特性化类修饰后的类)可以通过Reflect方式引用到特性类。
当然,如果是特性化类想获得运行类的数据,一般我们可以通过IL编程或动态代理的方式进行处理,这也是我们在.net中实现AOP的基础,当然在.net中已经存在相就能的轻量级AOP开发框架。
理论上说完了,再说一下使用,在使用特性化类时,在类/方法/属性上用[]进行修改,其内部就是特性化类,可以通过小括号的方式进行类的初始化。写类名时可以省略Attribute。如以下特性可以写作:
[AllTargetsAttribute(IsKey = true)]
// 或写作
[AllTarget(IsKey=true)]
// 以上两者等价。
// 如果AllTargetAttribute中存在构造函数:
// public AllTargetAttribute(bool IsKey);
// 则也可以写作
[AllTargetAttribute(true)]
// 或
[AllTarget(true)]
// 如果AllTargetAttribute中存在构造函数:
// public AllTargetAttribute(bool IsKey = true)
那么:
[AllTargetAttribute]
[AllTargetAttribute()]
[AllTargetAttribute(true)]
[AllTargetAttribute(IsKey = true)]
以及省略Attribute的写法全部等价!
有关其他的特性化编程信息,可以查看MSDN中的“特性化”主题。