zoukankan      html  css  js  c++  java
  • 通过反射得到对象

    得到目标类的类型
    反射类
        
    /// <summary>
        
    /// 作者:武广敬
        
    /// Blog:tonyepaper.cnblogs.com
        
        
    /// 
        
    /// 反射类
        
    /// </summary>
        public class MReference
        {
            
    /// <summary>
            
    /// 得到类型
            
    /// </summary>
            
    /// <param name="consultClass">与要反射的类同一命名空间下的别一类型,用于得到完全限定名</param>
            
    /// <param name="targetClassName">需要反射的类名</param>
            
    /// <returns>反射得到的类型</returns>
            public static Type getType(Type consultClass,string targetClassName)
            {
                
    //得到完全限定名
                string assemblyQualifiedName = consultClass.AssemblyQualifiedName;
                
    //从完全限定名的第一个逗号开始得到完全限定名的公共部份
                string assemblyInformation = assemblyQualifiedName.Substring(assemblyQualifiedName.IndexOf(","));
                
    try
                {
                    
    //根据要反射的类名+截取后的限定名得到要反射类的类型
                    Type ty = Type.GetType(targetClassName + assemblyInformation);
                    
    return ty;
                }
                
    catch (Exception ex)
                {
                    
    return null;
                }
               
            }
        }

    表单工厂
        /// 作者:武广敬
        
    /// Blog:tonyepaper.cnblogs.com
        
    /// 表单工厂
        
    /// </summary>
        public class FormFactory
        {
            
    /// <summary>
            
    /// 根据传入的数据库名,返回一个表单的实例
            
    /// </summary>
            
    /// <param name="tableName">数据库的表名</param>
            
    /// <returns>与此表相对应的表单对象</returns>
            public static Form GetInstance(string tableName)
            {
                
    //与目标对象类型相同命名空间的类型
                Type sourceType = typeof(MasterSoft.WinUI.frmMain);
                
    //目标对象类型全名(包括命名空间)
                string className = "MasterSoft.WinUI.frm" + tableName;

                
    //如果表名为空抛出异常
                if (string.IsNullOrEmpty(tableName))
                    
    throw new ArgumentNullException("tableName");

                
    return GetInstance(sourceType, className) as Form;
            }
            
    /// <summary>
            
    /// 得到对象
            
    /// </summary>
            
    /// <param name="sourceType">与目标对象类型相同命名空间的类型</param>
            
    /// <param name="className">//目标对象类型全名(包括命名空间)</param>
            
    /// <returns>反射得到的对象</returns>
            private static object GetInstance(Type sourceType, string className)
            {
                
    try
                {
                    
    //根据传入的表名得到对应窗体的类型 MasterSoft.WinUI.frmMain是相同命名空间下的一个类型,用于得到限定名
                    Type ty = MReference.getType(sourceType, className);
                    
    if (ty == null)
                        
    throw new ArgumentNullException("ty");
                    
    //得到类型的 GetInstance 方法(当然这个类型必须有这个静态方法-单例模式)
                    MethodInfo getInstance = ty.GetMethod("GetInstance");
                    
    if (getInstance == null)
                        
    throw new ArgumentNullException("getInstance");
                    
    //调用GetInstance静态方法
                    object obj = (MdiChildEditForm)getInstance.Invoke(nullnull);
                    
    //IMdiChildEditForm frm = ((IMdiChildEditForm)System.Activator.CreateInstance(ty)).GetInstance();
                    
    //返回得到的窗体
                    return obj;
                }
                
    catch (Exception ex)
                {
                    
    throw ex;
                }
            }
        }

    调用方法
                        Form frm = (Form)FormFactory.GetInstance(tableName);
                        frm.Show();
    ---------------------------------------------------------------------
    每个人都是一座山.世上最难攀越的山,其实是自己.往上走,即便一小步,也有新高度
    .

    --做最好的自己,我能!!!

  • 相关阅读:
    Bluedroid与BluZ,蓝牙测试方法的变动(基于bludroid和BlueZ的对比)
    dumpsys 用法
    ffmpeg开发指南
    Python七大原则,24种设计模式
    总结工厂模式---简单工厂、工厂方法、抽象工厂
    抽象工厂(Abstract Factory)
    工厂模式(Factory Method)
    逻辑回归(Logistic Regression) ----转载
    随机森林(Random Forest)--- 转载
    时间序列分析
  • 原文地址:https://www.cnblogs.com/tonyepaper/p/1367086.html
Copyright © 2011-2022 走看看