作爲一個免責聲明,我對C#完全陌生。這就是說,我在C#中尋找一個輕量級的pub/sub庫,我可以使用它,類似於我習慣的Javascript中的this。不過,我能找到的是.NET版本4或更高版本。我必須使用.NET 3.5。所以我決定寫我自己的,我稱之爲EventBus。目標是讓其他類自由訂閱/發佈事件總線中預先定義的事件。然而,我發現C#中的「事件」不是一等公民,因此我無法將它作爲參數傳遞給函數。所以我決定傳遞枚舉來指示當前哪個事件感興趣。我的EventBus按預期正常工作,但正如你在我的代碼中看到的那樣,當我添加一個新事件時,我遇到了在所有3個函數中繼續寫開關事件的問題。這是我的代碼。如何使用C#中的反射註冊事件#
public class EventBus {
public delegate void EventListener(object source, EventArgs args);
private static event EventListener MapLocationMarkerClicked;
public static void Subscribe(Event eventToSub, EventListener listener)
{
switch(eventToSub)
{
case Event.MapLocationMarkerClicked:
MapLocationMarkerClicked += listener;
break;
}
}
public static void Unsubscribe(Event eventToUnsub, EventListener listener)
{
switch (eventToUnsub)
{
case Event.MapLocationMarkerClicked:
MapLocationMarkerClicked -= listener;
break;
}
}
public static void Publish(Event eventToPub, object source, EventArgs args)
{
switch (eventToPub)
{
case Event.MapLocationMarkerClicked:
MapLocationMarkerClicked(source, args);
break;
}
}
}
public enum Event
{
MapLocationMarkerClicked
}
有沒有一種方法來實現所有的訂閱/取消訂閱/發佈操作,沒有像這樣的switch語句?我想知道C#的反思在這種情況下可以如何提供幫助。也許一旦枚舉(或字符串)被傳遞來表示一個事件,它就會被用來使用反射來查找事件並執行操作?
有了更多的上下文(它是爲了什麼?)有人可能能夠建議一個消息系統或接口或... –
或者查看調節器模式。 – Nkosi