根据类名字符串实例化类,并调用类的方法或函数


//获取类型信息

//如果调用其他的DLL 

//System.Reflection.Assembly asmb = System.Reflection.Assembly.LoadFrom("DLL名");

// Type t = asmb.GetType("类名");

//如果是不调用其他DLL

System.Type t = System.Type.GetType("类名"); 

            try

            {

                object dObj = Activator.CreateInstance(t);

                

            //获取方法的信息

                System.Reflection.MethodInfo method = t.GetMethod("方法名");

            //调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值

            System.Reflection.BindingFlags flag = System.Reflection.BindingFlags.Public | 

 

System.Reflection.BindingFlags.Instance;

            //GetValue方法的参数

            object[] parameters = new object[] { "参数1" };

            //object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, 

 

parameters, null);

//取得方法返回的值

            object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, 

 

parameters, null);

            

            }

            catch(Exception ex)

            {

 

            }



下面是我自己写的一个Reflection类,可以根据类名,方法名执行方法
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace SearchFromDB
{
    class Reflection
    {
        string ClassName="";
        Type clstype;
        public Reflection(string ClassName)
        {
            this.ClassName = ClassName;
        }
        public Reflection()
        {
            
        }
        /// <summary>
        /// 实例对象时需要指定类名
        /// </summary>
        public object GetClassInstance(string assembly ,string NameSpace)
        {
            //assembly为程序集名称,NameSpace为命名空间
            
            clstype = Assembly.Load(assembly).GetType(string.Concat(NameSpace, ".", this.ClassName));
            if (clstype == null)
                return null;
            object obj = (object)Activator.CreateInstance(clstype);
            return obj;
        }
        /// <summary>
        /// 实例对象时不用指定类名
        /// </summary>
        public object GetClassInstance(string assembly,string NameSpace,string classname)
        {
            ClassName = classname;
            clstype = Assembly.Load(assembly).GetType(string.Concat(NameSpace, ".", classname));
            if (clstype == null)
                return null;
            object obj = (object)Activator.CreateInstance(clstype);
            return obj;
        }
        /// <summary>
        /// 执行类的静态方法
        /// </summary>
        /// <param name="methodname">
        /// 类的方法名
        /// </param>
        /// <param name="parameters">
        /// 方法的参数类型
        /// </param>
        /// <param name="methodtype">
        /// 方法的参数
        /// </param>

        public object GetMethod(string methodname, Type[] methodtype, object[] parameters)
        {
            // methodtype.SetValue(typeof(string),1);
            System.Reflection.MethodInfo pMethod = clstype.GetMethod(methodname, BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.Public, null, methodtype, null);
            //调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值
            //System.Reflection.BindingFlags flag = BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.Public;
            object returnValue = pMethod.Invoke(null, parameters);
            //string returnValue = pMethod.Invoke(clsObj, flag, Type.DefaultBinder, parameters,null).ToString();
            return returnValue;
        }
    }
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值