从.dll中的.cs文件调用函数

时间:2017-05-29 23:15:03

标签: c#

我在编码时似乎遇到了问题。我正在为C#编写一个DLL。在我的DLL中,我需要在函数中放置一些代码。我遇到的问题是我需要在函数中放置的代码是在使用DLL的程序中编写的。例如:

MYDLL.DLL

using OtherGuyDLL.dll

public void Function1()
{
    OtherGuyEventHandler += DLLFunction;
}

private void DLLFunction(object sender, EventArgs e)
{
    ProgramFunction();
}

Program.cs的

using MyDLL.dll

public void ProgramFunction()
{
    //My code
}

编译MyDLL.dll时会出现问题。由于ProgramFunction()当时没有使用DLL,因此Program.cs不存在而导致错误。反正有吗?

编辑:为了进一步说明,DLLFunction()实际上是由事件处理程序调用的。我在我的DLL中使用第三方DLL。我希望我的DLL的用户能够指定一些代码,这些代码将在事件期间使用。我的DLL的目的主要是为了易于使用。我已经更新了我的示例代码,以便更好地了解这一点。

1 个答案:

答案 0 :(得分:0)

尽管我不是sender/eventArgs代表的忠实粉丝,但我会继续使用它,因为它已经在使用中。

外部库不具备应用程序的内部知识(包括Program类的方法),因为这将是循环引用。在编译之前,每个都需要另一个进行编译。

您可以在EventArgs传递对您希望外部.dll调用的函数的引用。

在此示例中,MyEventArgs类包含对Action的引用。当您致电ExecuteCallback时调用Action。您还可以将Action设为公共属性,然后事件处理程序可以直接调用它。

您将在外部库中声明MyEventArgs

public class MyEventArgs : EventArgs
{
    private readonly Action _callback { get; set;}

    public MyEventArgs(Action callback = null)
    {
        _callback = callback;
    }

    public void ExecuteCallback()
    {
        _callback?.Invoke();
    }
}

现在举起活动的班级会做

new MyEventArgs(this.ProgramFunction)

(假设提升事件的类与包含ProgramFunction的事件相同。

我不知道具体细节,但这是一般模式。调用库将函数传递给它,而不是引用的库知道调用哪个方法。