【问题标题】:C# How to expose events in DLLC# 如何在 DLL 中公开事件
【发布时间】:2018-08-30 18:51:11
【问题描述】:

我有一个需要公开“事件订阅”的 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
}

我该如何解决这个问题?

非常感谢!

【问题讨论】:

    标签: c# api events dll delegates


    【解决方案1】:

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

    这是一个在类之外定义它的示例:

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

    【讨论】:

    • 这行不是已经定义了吗? :public event TrackingEventHandler NewTrackingEventObservations; 我的例子来自这里:stackoverflow.com/questions/11542189/…
    • 您将 TrackingEventHandler 定义为公共的,但您包含在内部类中。修改的类访问优先,有效地使 TrackingEventHandler 成为内部的。
    • 你能否提供一个关于“......在这个类之外定义TrackingEventHandler......”的例子
    • 用例子更新了答案。
    • 我试过这个。我收到以下错误:“DerivedClass 未实现接口成员 InterfaceClass.example”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多