C#从DLL扩展类

时间:2014-03-18 15:06:24

标签: c# dll game-engine

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

我正在研究一种需要动态加载包含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:

所以我添加了一个' Console.WriteLine'调用我的Mod的Load函数,什么都没有出现。应该说点什么吧?我不会疯了吗?我可以更好地测试一下吗?

2 个答案:

答案 0 :(得分:2)

DLL需要引用你的引擎,这有点不方便,因为这会使你的引擎更改内容变得更加困难 - 你必须小心不要破坏DLL开发人员的向后兼容性。 / p>

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

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

此接口库将由您的引擎和mod开发人员引用 - 它是两个系统之间的合同。此界面很少会改变,您可以随意开发和修改引擎。

答案 1 :(得分:0)

是。它会很好地工作。