簡體   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