定制特性
[FiledName("SocialSecurityNumber")]
public string SocialSecurityNumber{
get{
//etc
public string SocialSecurityNumber{
get{
//etc
编译器:
1.把字符串Attribute添加到这个名称后面,形成一个组合名称FieldNameAttribute,如果该特性名称以字符串Attribute结尾则不添加
2.在其搜索路径中所用命名空间搜索有指定名称FieldNameAttribute的类,如果找到该类并且该类直接或者间接派生自System.Attribute。
[AttributeUsage(AttributeTargets.Property,AllowMultiple=false,Inherited=false)]
public class FieldNameAttribute:Attribute
{
private string name;
public FieldAttribute(string name)
{
this.name=name;
}
private string comment;
public string Comment
{
get{return comment;}
set{comment=value;}
}
}
public class FieldNameAttribute:Attribute
{
private string name;
public FieldAttribute(string name)
{
this.name=name;
}
private string comment;
public string Comment
{
get{return comment;}
set{comment=value;}
}
}
并且该属性类指定了
- 该特性可以应用到哪些程序元素上(类,结构,属性,方法等)
AttributeTargets枚举成员如下:All,Assembly,Class,Constructor,Delegate,Enum,Event,Field,GenericParameter,Interface,Method,Module,Parameter,Property,Return Value,Struct
在指定定制特性的有效目标元素时,可以使用按位or运算符把这些值组合起来,如AttributeTargets.Property|AttributeTargets.Field
- 它是否可以多次应用到同一程序元素上
[FieldName("SocialSecurityNumber")]
[FieldName("NationalInsuranceNumber")]
public string SocialSecurityNumber
{
//etc
[FieldName("NationalInsuranceNumber")]
public string SocialSecurityNumber
{
//etc
- 特性在应用到类或接口上时,是否由派生类或接口继承,如果Inherited设置为true,就表示应用到类或接口上的特性也可以自动应用到所有派生的类或接口上。如果特性应用到方法或者属性上,也可以自动应用到该方法或属性的重写版本上
- 这个特性有哪些必选和可选参数,构造函数的参数是必选参数,类的属性为可选参数可以通过如下语法设置
[FieldName("SocialSercurityNumber",Comment="this is the primary key field")]
public string SocialSecurityNumber
{
//etc
public string SocialSecurityNumber
{
//etc
less is more