使用反射c#调用抽象类方法

时间:2016-08-06 12:20:56

标签: c# .net dynamic reflection

我的外部dll设计如下:

class Engineering
{
   ProjectsCollection project {get;}
}

abstract class ProjectsCollection
{
   public abstract Project Open(string path);
}

我可以继续,直到获得方法信息

MethodInfo info = type.GetMethod("Open");

如何调用方法“打开”?

2 个答案:

答案 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