首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#在运行时调用静态方法而没有构建时引用吗?

C#在运行时调用静态方法而没有构建时引用吗?
EN

Stack Overflow用户
提问于 2009-09-10 18:00:22
回答 2查看 5.9K关注 0票数 6

我正在用C# .net (2.0)写一个系统。它有一种可插拔模块的架构。可以将程序集添加到系统中,而无需重新生成基本模块。为了建立到新模块的连接,我希望尝试按名称调用其他模块中的静态方法。我不希望在构建时以任何方式引用被调用的模块。

在我编写非托管代码时,从.dll文件的路径开始,我会使用LoadLibrary()将.dll放入内存,然后使用get GetProcAddress()获取我希望调用的函数的指针。如何在C# / .NET中实现同样的效果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-10 18:03:04

在使用Assembly.LoadFrom(...)加载程序集之后,您可以按名称获取类型,并获得任何静态方法:

代码语言:javascript
运行
复制
Type t = Type.GetType(className);

// get the method
MethodInfo method = t.GetMethod("MyStaticMethod",BindingFlags.Public|BindingFlags.Static);

Then you call the method:

method.Invoke(null,null); // assuming it doesn't take parameters
票数 18
EN

Stack Overflow用户

发布于 2009-09-10 18:07:55

下面是一个示例:

代码语言:javascript
运行
复制
        string assmSpec = "";  // OS PathName to assembly name...
        if (!File.Exists(assmSpec))
            throw new DataImportException(string.Format(
                "Assembly [{0}] cannot be located.", assmSpec));
        // -------------------------------------------
        Assembly dA;
        try { dA = Assembly.LoadFrom(assmSpec); }
        catch(FileNotFoundException nfX)
        { throw new DataImportException(string.Format(
            "Assembly [{0}] cannot be located.", assmSpec), 
            nfX); }
        // -------------------------------------------
        // Now here you have to instantiate the class 
        // in the assembly by a string classname
        IImportData iImp = (IImportData)dA.CreateInstance
                          ([Some string value for class Name]);
        if (iImp == null)
            throw new DataImportException(
                string.Format("Unable to instantiate {0} from {1}",
                    dataImporter.ClassName, dataImporter.AssemblyName));
        // -------------------------------------------
       iImp.Process();  // Here you call method on interface that the class implements
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1406795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档