zoukankan      html  css  js  c++  java
  • 反射的帮助类

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

    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.UserModel
                Type 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> LAttribute
            public 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
    
        }
    }
    
  • 相关阅读:
    数据结构实践——败者树归并模拟
    systemctl介绍
    Andriod Atom x86模拟器启动报错。
    (白书训练计划)UVa 11572 Unique Snowflakes(窗体滑动法)
    OpenCV2.3.1在CentOS6.5下的安装
    本学期课程教学要解决这个问题要点备忘录
    firefox浏览器和IE
    [LeetCode] Validate Binary Search Tree
    android性能优化优秀文章
    如何在使用eclipse的情况下,清理android项目中的冗余class文件和资源文件以及冗余图片
  • 原文地址:https://www.cnblogs.com/fanxiaojun/p/2385688.html
Copyright © 2011-2022 走看看