[英]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.