代码
1 /// <summary>
2 /// 自定义属性
3 /// </summary>
4 [AttributeUsage(AttributeTargets.All, Inherited = false)]
5 public sealed class CustomAttribute : Attribute {
6 private string _UserName = null;
7
8 /// <summary>
9 /// 只对必填参数使用构造函数赋值
10 /// 避免提供构造函数参数来对可选属性(可选参数)进行初始化
11 /// 避免对自定义属性的构造函数进行重载,只定义一个构造函数可以清楚的告诉用户哪些参数是必填的,哪些参数是可选的
12 /// 要尽可能将自定义属性类密封起来,这样会使查找更快
13 /// </summary>
14 /// <param name="userName">必填参数</param>
15 public CustomAttribute(string userName) {
16 this._UserName = userName;
17 }
18
19 /// <summary>
20 /// 必填参数
21 /// </summary>
22 public string UserName { get { return this._UserName; } }
23
24 /// <summary>
25 /// 可选参数
26 /// </summary>
27 public int Age { get; set; }
28 }
2 /// 自定义属性
3 /// </summary>
4 [AttributeUsage(AttributeTargets.All, Inherited = false)]
5 public sealed class CustomAttribute : Attribute {
6 private string _UserName = null;
7
8 /// <summary>
9 /// 只对必填参数使用构造函数赋值
10 /// 避免提供构造函数参数来对可选属性(可选参数)进行初始化
11 /// 避免对自定义属性的构造函数进行重载,只定义一个构造函数可以清楚的告诉用户哪些参数是必填的,哪些参数是可选的
12 /// 要尽可能将自定义属性类密封起来,这样会使查找更快
13 /// </summary>
14 /// <param name="userName">必填参数</param>
15 public CustomAttribute(string userName) {
16 this._UserName = userName;
17 }
18
19 /// <summary>
20 /// 必填参数
21 /// </summary>
22 public string UserName { get { return this._UserName; } }
23
24 /// <summary>
25 /// 可选参数
26 /// </summary>
27 public int Age { get; set; }
28 }