C#如何在DLL中公开事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何在DLL中公开事件相关的知识,希望对你有一定的参考价值。

我有一个需要公开“事件订阅”的DLL,因此使用我的DLL的应用程序可以订阅特定事件来获取数据。 (DLL本身订阅了来自SDK的事件)我对事件很新,所以请温柔地对我解释。

我有一个DLL,看起来像这样:

internal class BaseClass
{
}
internal Class DerivedClass : BaseClass, InterfaceClass
{
  public event TrackingEventHandler NewTrackingEventObservations; 
  public delegate void TrackingEventHandler(Object sender, TrackingEventArgs e);
}

在我的界面中,我想公开委托TrackingEventHandler

接口:

public interface InterfaceClass
{
  event TrackingEventHandler NewTrackingEventObservations; // <- Error: TrackingEventHandler is less accessable then the field NewTrackingEventObservations
}

我该如何解决这个问题?

非常感谢!

答案

您得到的错误是因为TrackingEventHandler包含在一个internal类中(只能通过同一个程序集中的文件访问,请参阅此link),但您尝试公开的接口是public。您可以将包含类设置为public,也可以在此类之外定义TrackingEventHandler(它不需要包含在类定义中)。

以下是在类之外定义它的示例:

namespace someNamespace
{

    public delegate void TrackingEventHandler(Object sender, TrackingEventArgs e);

    internal Class BaseClass{ }
    internal Class DerivedClass : BaseClass, InterfaceClass
    {
      public event TrackingEventHandler NewTrackingEventObservations;
    }
}

以上是关于C#如何在DLL中公开事件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用公开导出的全局 DLL 变量?

C#WinForm程序设计中如何调用一些dll插件的事件?(急,如果问题不清晰,请进!)

如何在 C++ 中创建一个公开返回对象的函数的 COM Dll?

向 VBScript (ATL) 公开 COM 事件

C语言怎么使用动态链接库,如何创建?(高手进)

从 C++ dll 导出一个类?