从接口实现自定义事件处理程序

时间:2017-06-05 09:55:13

标签: c# interface event-handling

我正在创建一个可以接收来自各种不同来源的消息的系统。

使用interface方法,我正在添加一个自定义事件,该事件会将消息传递回调用应用程序。

我使用过Vistual Studio"脚手架"使用Ctrl-.为具体类提供实现,但它添加了addremove元素,但我真的不知道如何连接这一点。

接口类

public class MessageEventArgs : EventArgs
{
    public Message { get; set; }
}

public interface MessageBroker
{
    void Start();

    event EventHandler<MessageEventArgs> OnMessageReceived;
}

实施班级

public class MessageSourceA : MessageBroker
{
    event EventHandler<MessageEventArgs> MessageBroker.OnMessageReceived
    {
        add
        {
            // What goes here
        }

        remove
        {
            // What goes here
        }
    }

    void MessageBroker.Start()
    {
    }
}

主程序

    static void Main(string[] args)
    {
        MessageBroker sourceA = new MessageSourceA ();
        sourceA.OnMessageReceived += sourceA_OnMessageReceived;
    }

    private static void sourceA_OnMessageReceived(object sender, MessageEventArgs e)
    {
        // Do stuff with message
    }

...谢谢

1 个答案:

答案 0 :(得分:1)

您通常可以从界面实施。

public class MessageSourceA : IMessageBroker
{ 
    public void Start(); 
    public event EventHandler<MessageEventArgs> OnMessageReceived;
 }

我建议您将MessageBroker重命名为IMessageBroker作为其命名约定。因为“I”在查看代码时有助于区分类和接口。

如果有正确的原因明确实现接口,则需要私有事件处理程序。

private event EventHandler<MessageEventArgs> _onMessageReceived;

event EventHandler<MessageEventArgs> MessageBroker.OnMessageReceived 
{ 
    add 
    { 
        _onMessageRecieved += value;
    }
    remove 
    { 
        _onMessageRecieved -= value; 
    }
}