java 字符串是类名.class 如何实例化_根据类名字符串实例化类,并调用类的方法或函数 转...

本文介绍如何使用C#反射机制加载类并调用其方法,包括从指定DLL中获取类型信息及执行静态方法的具体步骤。

//获取类型信息

//如果调用其他的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类,可以根据类名,方法名执行方法

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Reflection;

namespaceSearchFromDB

{

classReflection

{

stringClassName="";

Type clstype;

publicReflection(stringClassName)

{

this.ClassName = ClassName;

}

publicReflection()

{

}

/// 

/// 实例对象时需要指定类名

/// 

publicobjectGetClassInstance(stringassembly ,stringNameSpace)

{

//assembly为程序集名称,NameSpace为命名空间

clstype = Assembly.Load(assembly).GetType(string.Concat(NameSpace,".",this.ClassName));

if(clstype ==null)

returnnull;

objectobj = (object)Activator.CreateInstance(clstype);

returnobj;

}

/// 

/// 实例对象时不用指定类名

/// 

publicobjectGetClassInstance(stringassembly,stringNameSpace,stringclassname)

{

ClassName = classname;

clstype = Assembly.Load(assembly).GetType(string.Concat(NameSpace,".", classname));

if(clstype ==null)

returnnull;

objectobj = (object)Activator.CreateInstance(clstype);

returnobj;

}

/// 

/// 执行类的静态方法

/// 

/// 

/// 类的方法名

/// 

/// 

/// 方法的参数类型

/// 

/// 

/// 方法的参数

/// 

publicobjectGetMethod(stringmethodname, 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;

objectreturnValue = pMethod.Invoke(null, parameters);

//string returnValue = pMethod.Invoke(clsObj, flag, Type.DefaultBinder, parameters,null).ToString();

returnreturnValue;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值