繁体   English   中英

C#从DLL扩展类

[英]C# Extending Classes from DLL

好吧,这应该是一个非常简单的问题

我正在研究一种游戏引擎类型的东西,该东西需要动态加载包含mod内容的外部DLL。 因此,问题基本上是:

我的引擎中有以下内容:

public class Mod
{
    public abstract void OnLoad(ModLoadedArgs args);
}

如果要在DLL中放入以下内容:

public class ContentMod : Mod
{
    public void OnLoad(ModLoadedArgs args)
    {
        BaseEngine.Dictionary.Register(new Thing()); // BaseEngine.Dictionary is
                                                     // a static object
    }
}

这样可以正常工作吗?

对不起这个基本问题,我是使用DLL的新手,无法访问笔记本电脑上的IDE,否则我会自己尝试。

编辑1:

所以...到目前为止,一切都很好,除了.Load似乎并没有改变我在Program.cs中拥有的oreDict对象,我觉得这是一个愚蠢的问题,但仍然伤了我的头。

Assembly a = Assembly.LoadFrom(files[i]);
foreach (Type t in a.GetTypes())
{
    if (t is Mod)
    {
        ((Mod)t).Load(new ModOnLoadArgs(oreDict));
    }
}

编辑2:

因此,我在Mod的Load函数中添加了“ Console.WriteLine”调用,但没有任何反应。 应该说些什么吧? 我不会疯了吗? 我可以更好地测试吗?

DLL需要引用您的引擎,这有点不方便,因为这将使更改引擎中的内容更加困难-您必须注意不要破坏与DLL开发人员的向后兼容性。

另一个解决方案是创建一个仅包含mod设计器所需接口的

public interface IMod
{
    void OnLoad(ModLoadedArgs args);
}

您的引擎和mod开发人员都将引用此接口库-这是两个系统之间的契约 该界面几乎不会更改,您可以随意开发和修改引擎。

是。 完全可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM