2017-06-05 85 views
1

我正在創建一個可以接收來自各種不同來源的消息的系統。從接口實現自定義事件處理程序

使用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 
    } 

謝謝...

+0

你通常不需要這些,只要在「OnMessageReceived」之後加上一個分號(除去身體),除非你做了一些特殊的事情。然後你可以像調用其他方法一樣調用它(檢查它是否爲空)。 – john

+1

是否必須明確實施? –

+1

請參閱[文檔](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/add)以獲取更多詳細信息和示例[如何:實現接口事件](https:/ /docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-implement-interface-events) – Reniuz

回答

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; 
    } 
} 
+0

是的,「我」在那裏,當我複製時它已經掉落。添加了PUBLIC範圍,並且現在已將其全部排序 –

相關問題