http://blog.csdn.net/litao2/article/details/17633107
使用反射访问: 自定义属性的信息和对其进行操作的方法。
一、实例1
1、代码:
如:System.Attribute[] attrs=System.Attribute.GetCustomAttributes(typeof(FirstClass));
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
-
- PrintAuthorInfo(typeof(FirstClass));
- PrintAuthorInfo(typeof(SecondClass));
- PrintAuthorInfo(typeof(ThirdClass));
- Console.ReadKey();
- }
-
- private static void PrintAuthorInfo(System.Type t)
- {
- System.Console.WriteLine("\n类型的 System.Type 对象是:{0}", t);
- System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t);
-
- foreach (System.Attribute attr in attrs)
- {
- if (attr is Author)
- {
- Author a = (Author)attr;
- System.Console.WriteLine(" 名称:{0}, 版本: {1:f}", a.GetName(), a.version);
- }
- }
- }
- }
-
-
-
- [System.AttributeUsage(System.AttributeTargets.Class |
- System.AttributeTargets.Struct,
- AllowMultiple = true)
- ]
- public class Author : System.Attribute
- {
- string name;
- public double version;
-
- public Author(string name)
- {
- this.name = name;
- version = 1.0;
- }
-
- public string GetName()
- {
- return name;
- }
- }
-
- [Author("H. Ackerman")]
- public class FirstClass
- {
-
- }
-
-
- public class SecondClass
- {
-
- }
-
- [Author("H. Ackerman"), Author("M. Knott", version = 2.0)]
- public class ThirdClass
- {
-
- }
-
-
- }
2、效果:
二、实例2
1、代码
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Linq.Expressions;
- using System.Collections.Specialized;
- using System.Reflection;
- using System.Data.Linq.Mapping;
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
-
- PropertyInfo[] propertys = typeof(FirstClass).GetProperties();
- if (propertys != null && propertys.Length > 0)
- {
- foreach (PropertyInfo p in propertys)
- {
- object[] objAttrs = p.GetCustomAttributes(typeof(ColumnAttribute), true);
-
- if (objAttrs != null && objAttrs.Length > 0)
- {
- ColumnAttribute attr = objAttrs[0] as ColumnAttribute;
- Console.WriteLine("自定义特性Name:"+p.Name+", 元数据:"+attr);
- }
- };
- }
- Console.ReadKey();
- }
-
- }
-
-
-
- public class FirstClass
- {
- private int _newsid = 0;
-
-
-
-
- [Column(Name = "NewsId", DbType = "int", IsPrimaryKey = true, CanBeNull = false, IsDbGenerated = true)]
- public int NewsId
- {
- get
- {
- return this._newsid;
- }
- set
- {
- this._newsid = value;
- }
- }
-
- private string _newsimage = string.Empty;
-
-
-
-
- [Column(Name = "NewsImage", DbType = "varchar", IsPrimaryKey = false, CanBeNull = false, IsDbGenerated = false)]
- public string NewsImage
- {
- get
- {
- return this._newsimage;
- }
- set
- {
- this._newsimage = value;
- }
- }
- }
- }
2、效果
其他:
FullName(获得System.Type的完全限定名,包括命名空间)
三、实例3
- FirstClass fClass = new FirstClass();
- PropertyInfo pInstance = typeof(FirstClass).GetProperty("NewsId");
- pInstance.SetValue(fClass, 11, null);
-
- Console.WriteLine("新闻ID:"+fClass.NewsId);
- Console.WriteLine("新闻图片:"+fClass.NewsImage);
//在4px的库内操作获取打印机
trv_LabelInvoice.Nodes.Clear();
string strText = string.Empty; FieldInfo[] fields = typeof(EnumPrintName).GetFields(); foreach (FieldInfo field in fields) { strText = field.Name;
object[] arrAttributes = field.GetCustomAttributes(typeof(Attribute), true); if (arrAttributes != null) { EnumAttribute objEnumAttribute = arrAttributes.FirstOrDefault(x => x.GetType().Name.Equals(typeof(EnumAttribute).Name)) as EnumAttribute; if (objEnumAttribute != null) { strText = objEnumAttribute.Description; } }
if (trv_LabelInvoice.Nodes.IndexOfKey(field.Name) < 0) { trv_LabelInvoice.Nodes.Add(field.Name, strText); } }
|
请发表评论