自定义特性一般标注在作用的程序元素的上方
编译器首先组合特性名称和Attribute,然后寻找该组合名,所以特性名为FieldName和FieldNameAttribute的两个特性没有区别
编译器将寻找包含有这个名称的类,它直接或者间接的派生资System.Attribute
编写自定义类的步骤:
1.指定AttributeUsage特性,这个特性用在其他特性上,它有以下三个参数
AttributeTargets枚举指定特性的应用程序元素类型,如果是应用于程序集或者模块,特性可以放在代码的任何地方,格式如下:
[assembly:SomeAssemblyAttribute(Params)][module:SomeAssemblyAttribute(Params)]
AllowMultiple = true; 说明特性可以对同一对象使用多次
Inherited = true;说明应用到类和接口上的特性自动添加到派生类和接口上
2.指定特性的参数和可选参数,分别用了两种语法,
第一种 [FieldName("hxx")] 则自定义特性中应该写一个匹配类型的构造函数
第二种[FieldName("sy", Comment = "the most wonderful girl in the world")] 那么定义的时候最好包含这个字段 public string Comment { get; set; }
3.demo
using System; namespace WhatsNewAttributes { [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = true,Inherited = false)] public class LastModifiedAttribute: Attribute { private readonly DateTime _dateModified; private readonly string _changes; public LastModifiedAttribute(string dateModified,string changes) { _dateModified = DateTime.Parse(dateModified); _changes = changes; } public DateTime DateModified => _dateModified; public string Changes => _changes; public string issues { set; get; } } [AttributeUsage(AttributeTargets.Assembly)] public class SupportWhatsNewAttributes : Attribute { } }