我的外部dll设计看起来像:
class Engineering
{
ProjectsCollection project {get;}
}
abstract class ProjectsCollection
{
public abstract Project Open(string path);
}
我可以继续直到获得方法信息
MethodInfo info = type.GetMethod("Open");
如何调用方法"打开"?
反射与否,您都不能调用抽象方法,因为没有什么可调用的。当然,你可以写
info.Invoke(eng.project, new object[] {path});
但它会抛出异常,除非eng.project
设置为从 ProjectCollection
后代的非抽象类的对象,该类实现了 Open
方法:
class ProjectsCollectionImpl : ProjectsCollection {
public Project Open(string path) {
return ...
}
}
Engineering eng = new Engineering(new ProjectsCollectionImpl());
MethodInfo info = type.GetMethod("Open");
var proj = info.Invoke(eng.project, new object[] {path});
只需呼叫Invoke
!
info.Invoke(someObject, new object[] {"This is the parameter of the method"});
就这么简单!
Invoke
的返回值将是Open
的返回值,它应该是一个Project
对象。
从文档中:
使用指定的参数调用当前实例表示的方法或构造函数。
哦,你应该知道上面的someObject
是你调用该方法的对象。您应该始终将其作为具体类的实例!不要给它null
!