我的外部dll设计如下:
class Engineering
{
ProjectsCollection project {get;}
}
abstract class ProjectsCollection
{
public abstract Project Open(string path);
}
我可以继续,直到获得方法信息
MethodInfo info = type.GetMethod("Open");
如何调用方法“打开”?
答案 0 :(得分:1)
反射与否,你不能调用抽象方法,因为没有什么可以调用。当然,你可以写
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});
答案 1 :(得分:0)
只需致电Invoke
!
info.Invoke(someObject, new object[] {"This is the parameter of the method"});
这很简单!
Invoke
的返回值将是Open
的返回值,该值应为Project
个对象。
来自文档:
使用指定的参数调用当前实例表示的方法或构造函数。
哦,你应该知道上面someObject
是你正在调用方法的对象。你应该总是把它变成一个具体类的实例!不要给它null
!