[英]How to do dynamic object creation and method invocation in .NET 3.5
代码看起来如何创建类的对象:
string myClass = "MyClass";
以上类型,然后调用
string myMethod = "MyMethod";
那个对象?
Type.GetType(string)
获取类型对象。 Activator.CreateInstance(Type)
创建实例。 Type.GetMethod(string)
检索方法。 MethodBase.Invoke(object, object[])
来调用对象上的方法 示例,但没有错误检查:
using System;
using System.Reflection;
namespace Foo
{
class Test
{
static void Main()
{
Type type = Type.GetType("Foo.MyClass");
object instance = Activator.CreateInstance(type);
MethodInfo method = type.GetMethod("MyMethod");
method.Invoke(instance, null);
}
}
class MyClass
{
public void MyMethod()
{
Console.WriteLine("In MyClass.MyMethod");
}
}
}
每一步都需要仔细检查 - 你可能找不到类型,它可能没有无参数构造函数,你可能找不到方法,你可能用错误的参数类型调用它。
有一点需要注意:Type.GetType(string)需要类型的程序集限定名称,除非它在当前正在执行的程序集或mscorlib中。
我创建了一个库,它简化了使用.NET的动态对象创建和调用,你可以下载库和谷歌代码中的代码: Late Binding Helper在项目中你会找到一个带有用法的Wiki页面 ,或者你也可以检查这个CodeProject中的文章
使用我的库,您的示例将如下所示:
IOperationInvoker myClass = BindingFactory.CreateObjectBinding("MyClassAssembly", "MyClass");
myClass.Method("MyMethod").Invoke();
甚至更短:
BindingFactory.CreateObjectBinding("MyClassAssembly", "MyClass")
.Method("MyMethod")
.Invoke();
它使用流畅的界面,真正简化了这种操作。 我希望你能发现它很有用。
下面假设一个对象具有公共构造函数和公共方法,该方法返回一些值但不带参数。
var object = Activator.CreateInstance( "MyClass" );
var result = object.GetType().GetMethod( "MyMethod" ).Invoke( object, null );
假设您的类在执行程序集中,您的构造函数和方法是无参数的。
Type clazz = System.Reflection.Assembly.GetExecutingAssembly().GetType("MyClass");
System.Reflection.ConstructorInfo ci = clazz.GetConstructor(new Type[] { });
object instance = ci.Invoke(null); /* Send parameters instead of null here */
System.Reflection.MethodInfo mi = clazz.GetMethod("MyMethod");
mi.Invoke(instance, null); /* Send parameters instead of null here */
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.