标签:
自定义Attribute:
1)Attribute都从System. Attribute类继承,类名一般以Attribute结尾
2) 标记类的用途—AttributeUsage标记(标记的标记):AttributeTargets:可以添加到哪些成员上。 AllowMultiple:是否允许在一个成员上标记这个Attribute的多个实例,默认false。标注在Attribute类的类名上方。
3)Attribute只是给类、成员做标记,本身没有什么意义,不会发生任何动作,就像小偷踩点在门上做标记(StealableAttribute)一样,具体这个标记会起到什么作用是由使用这个类、成员的代码决定的。
案例代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Reflection; using System.Runtime.Serialization.Formatters.Binary; namespace _11动态创建一个对象的html表单页 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Person p1 = new Person(); p1.Name = "hzy"; p1.Age = 25; p1.Email = "hzy@sina.com"; // Car car = new Car() { Brand = "兰博基尼", LicenseNo = "京00000" }; CreateFormByObject(p1); } private void CreateFormByObject(object obj) { Type type = obj.GetType();//获取这个对象的type StringBuilder sbHtml = new StringBuilder(); PropertyInfo[] pinfo = type.GetProperties();//获取当前对象中的所有的属性 foreach (PropertyInfo item in pinfo) { //这句话的意思是,获取当前遍历的属性Brand上所标记的UserLanguageAttribute特性 object[] objs = item.GetCustomAttributes(typeof(UserLanguageAttribute), false); //获取所有标记的特性,不包含父类中继承下来的特性 //item.GetCustomAttributes(false) //objs[0].GetType().Name //表示当前属性标记了这个特性(UserLanguageAttribute) if (objs.Length > 0) { UserLanguageAttribute ula = (UserLanguageAttribute)objs[0]; sbHtml.Append(ula.DisplayLanguage + ":<input value=\"" + item.GetValue(obj, null) + "\"/><br/>"); } else { sbHtml.Append(item.Name + ":<input value=\"" + item.GetValue(obj, null) + "\"/><br/>"); } } webBrowser1.DocumentText = sbHtml.ToString(); } } public class Person { [UserLanguage("xing ming")] public string Name { get; set; } [UserLanguage("nian ling")] public int Age { get; set; } //[UserLanguage("yi mei er")] public string Email { get; set; } } public class Car { [UserLanguage("品牌")] public string Brand { get; set; } [UserLanguage("车牌号码")] public string LicenseNo { get; set; } } public class UserLanguageAttribute : Attribute { public UserLanguageAttribute(string lan) { this.DisplayLanguage = lan; } public string DisplayLanguage { get; set; } } }
运行结果:
标签:
原文地址:http://www.cnblogs.com/zy-style/p/4290453.html