欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

反射的帮助类

发布时间:2024/9/5 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 反射的帮助类 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

在做项目时,常常需要配置一些属性的,这就需要用到反射机制,下面是项目中常用到一些基本的放射方法:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Collections;namespace SKY.DEFINITION {/// <summary>/// 该类是用来实现反射的/// 范小军/// </summary>public class ReflectionAboutClass{/// <summary>/// 构造函数/// 传递一个对象进来/// </summary>/// <param name="obj"></param>public ReflectionAboutClass(){this.Ltype = new List<string>();this.Ltype2 = new List<string>();this.LValue = new List<string>();this.LClass = new List<string>();this.LAttribute = new List<string>();this.LAttribute2 = new List<string>();this.LMethodName = new List<string>();this.LDefaultValue = new List<string>();}#region 变量/// <summary>/// 用来保存对象中所有的属性/// </summary>public List<string> Ltype { get; set; }/// <summary>/// 用来保存对象中所有的属性2/// </summary>public List<string> Ltype2 { get; set; }/// <summary>/// 用来保存对象中所有属性的值/// </summary>public List<string> LValue { get; set; }/// <summary>/// 用来保存某个命名空间下所有的类名称/// </summary>public List<string> LClass { get; set; }/// <summary>/// 用来保存属性的描述信息/// </summary>public List<string> LAttribute { get; set; }/// <summary>/// 用来保存属性的描述信息2/// </summary>public List<string> LAttribute2 { get; set; }/// <summary>/// 用来保存一个类中所有的方法名/// </summary>public List<string> LMethodName { get; set; }/// <summary>/// 用来保存默认值的/// </summary>public List<string> LDefaultValue { get; set; }#endregion#region 方法/// <summary>/// 用来获取一个对象的所有属性,并保存在一个List 中/// 并取得所有的属性,对于于obj 对象中的值/// </summary>/// <param name="NameSpacestr"></param>/// 命名空间的字符串参数/// <param name="obj"></param>/// 对象参数/// <returns></returns>public void getProperty(string NameSpacestr){Object obj = new object();Type t = Type.GetType(NameSpacestr);if (t == null) {return;}foreach (PropertyInfo pi in t.GetProperties(BindingFlags.Instance | BindingFlags.Public)){Ltype.Add(pi.Name);//LValue.Add( pi.GetValue(obj, null).ToString()); }}/// <summary>/// 获取一个属性的类型/// </summary>/// <param name="NameSpacestr"></param>/// <param name="obj"></param>/// <param name="PropertyName"></param>/// <returns></returns>public string getPropertyType(string NameSpacestr, string PropertyName){Type t = Type.GetType(NameSpacestr);string tempvalue = ""; foreach (PropertyInfo pi in t.GetProperties(BindingFlags.Instance | BindingFlags.Public)){List<string> lpropername = new List<string>();List<string> ldefault = new List<string>();string temp = "";object[] attrs = pi.GetCustomAttributes(typeof(PropertyDescriptionAttribute), true);if (attrs.Length == 1){PropertyDescriptionAttribute attr = (PropertyDescriptionAttribute)attrs[0];lpropername.Add(attr.ProperVlaue);ldefault.Add(attr.DefaultValue.ToString()); }for (int i = 0; i < lpropername.Count; i++) {if (ldefault[i].Equals(PropertyName)){temp = lpropername[i];}}if (pi.Name.Equals(temp)){tempvalue = pi.PropertyType.Name.ToString();break;}}return tempvalue;}/// <summary>/// 根据属性的名称去取得该某个对象的该属性的值/// </summary>/// 该对象所在的命名空间/// <param name="NameSpacestr"></param>/// 取值的对象/// <param name="obj"></param>/// 需要取值的属性名称/// <param name="PropertyName"></param> /// <returns></returns>public string getPropertyValue(string NameSpacestr, Object obj, string PropertyName){//SKY.MODEL.UserModelType t = Type.GetType(NameSpacestr);if (t == null) {return "";}string tempvalue = "";foreach (PropertyInfo pi in t.GetProperties(BindingFlags.Instance | BindingFlags.Public)){if (pi.Name.Equals(PropertyName)){tempvalue = pi.GetValue(obj, null).ToString();break;}}return tempvalue;}/// <summary>/// 判断是否存在某个命名空间/// </summary>/// <param name="NameSpacestr"></param>/// <returns></returns>public bool IsExitNameSpace(string NameSpacestr){Type t = Type.GetType(NameSpacestr);if (t == null) {return false;}else{return true;} }/// <summary>/// 获取某个对象的命名空间/// </summary>/// <param name="obj"></param>/// <returns></returns>public string getSpaceName(Object obj){Type t = obj.GetType();if (t == null) {return "";}return t.FullName.ToString();}/// <summary>/// 用来获取一个类中的所有的方法/// </summary>/// 参数为包括命名空间的类名/// <param name="ClassName"></param>public void getMethodName(string ClassName){Type t = Type.GetType(ClassName);if (t == null) {return;}MethodInfo[] methods = t.GetMethods();foreach (MethodInfo method in methods){LMethodName.Add(method.Name);}}/// <summary>/// 用来获取一个命名空间下所有类的名字/// </summary>/// 命名空间字符串作为参数/// <param name="NameSpacestr"></param>public void getClassName(string NameSpacestr){Assembly _Assembyle = Assembly.GetAssembly(this.GetType());Type[] _TypeList = _Assembyle.GetTypes();for (int i = 0; i != _TypeList.Length; i++){if (_TypeList[i].Namespace == NameSpacestr){LClass.Add(NameSpacestr + "." + _TypeList[i].Name);}}}/// <summary>/// 用来获取属性的描述信息/// </summary>/// 类名字做为参数/// <param name="NameSpacestr"></param>public void getAttribute(string NameSpacestr){Object obj = new object();Type t = Type.GetType(NameSpacestr);if (t == null) {return;}foreach (PropertyInfo proInfo in t.GetProperties()){object[] attrs = proInfo.GetCustomAttributes(typeof(PropertyDescriptionAttribute), true);if (attrs.Length == 1){PropertyDescriptionAttribute attr = (PropertyDescriptionAttribute)attrs[0];LAttribute.Add(attr.FieldName);if (attr.DefaultValue != null) {LDefaultValue.Add(attr.DefaultValue.ToString());}}}}/// <summary>/// 用来获取属性的描述信息/// </summary>/// 类名字做为参数2返回List string/// <param name="NameSpacestr"></param>// List<string> LAttributepublic void getAttribute_Return(string NameSpacestr){//List<string> LAttribute2 = new List<string>();//List<string> LAttribute2Name = new List<string>(); Object obj = new object();Type t = Type.GetType(NameSpacestr);if (t == null) {return;}foreach (PropertyInfo proInfo in t.GetProperties()){object[] attrs = proInfo.GetCustomAttributes(typeof(PropertyDescriptionAttribute), true);if (attrs.Length == 1){PropertyDescriptionAttribute attr = (PropertyDescriptionAttribute)attrs[0];LAttribute2.Add(attr.FieldName);Ltype2.Add(proInfo.Name);}}//a.Add(LAttribute2);//a.Add(LAttribute2Name);}/// <summary>/// 用来获取属性的描述信息/// </summary>/// 类名字做为参数2返回List string/// <param name="NameSpacestr"></param>public string getAttribute_Return2(string NameSpacestr ,string Properties){// Object obj = new object();Type t = Type.GetType(NameSpacestr);if (t == null) {return "";}string FieldName = "";foreach (PropertyInfo proInfo in t.GetProperties()){object[] attrs = proInfo.GetCustomAttributes(typeof(PropertyDescriptionAttribute), true);if (attrs.Length == 1){if (Properties == proInfo.Name){PropertyDescriptionAttribute attr = (PropertyDescriptionAttribute)attrs[0];FieldName = attr.FieldName;}}}return FieldName;}/// <summary>/// 通过方法名字,执行BLL层中ReportDataSourse类中的方法/// </summary>/// <param name="methodname"></param>public void exectueMethod(string methodname){// Assembly assem = Assembly.GetExecutingAssembly();Assembly assem = Assembly.Load("TLaura.TxBLL");AssemblyName assemName = assem.GetName();Object o = assem.CreateInstance("ReportDataSourse", false, BindingFlags.ExactBinding, null, new Object[] { }, null, null); try{MethodInfo m = assem.GetType("TLaura.TxBLL.ReportDataSourse").GetMethod(methodname);Object ret = m.Invoke(o, new Object[] { 42, 4 });}catch (Exception e){Console.WriteLine(e.Message);}}#endregion} }

 

转载于:https://www.cnblogs.com/fanxiaojun/archive/2012/03/08/2385688.html

总结

以上是生活随笔为你收集整理的反射的帮助类的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。