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



我的外部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

相关内容

  • 没有找到相关文章

最新更新