Трудно понять, что было бы лучше здесь, поскольку вы предоставили такой маленький контекст. Все, что мы действительно знаем, это то, что у вас есть один класс (назовите его class A
), обрабатывая определенные события, и другой класс (назовите его class B
), который хочет иметь возможность обрабатывать события, о которых уже знает первый класс.
Исходя из этого, существует по крайней мере несколько возможностей, которые могут сработать для вас.
Вариант № 1:
разоблачить "присоединился к" событию так, что второй класс может получить то же уведомление и подписаться на события канала:
class JoinedChannelEventArgs : EventArgs
{
public Channel Channel { get; private set; }
public JoinedChannelEventArgs(Channel channel) { Channel = channel; }
}
class A
{
public static event EventHandler<JoinedChannelEventArgs> JoinedChannel;
private static void LocalUser_JoinedChannel(object sender, IrcChannelEventArgs e)
{
e.Channel.MessageReceived += Channel_MessageReceived;
Console.WriteLine("Joined " + e.Channel + "\n");
EventHandler<JoinedChannelEventArgs> handler = JoinedChannel;
if (handler != null)
{
handler(null, new JoinedChannelEventArgs(e.Channel);
}
}
}
class B
{
static void SomeMethod()
{
A.JoinedChannel += A_JoinedChannel;
}
private static void A_JoinedChannel(object sender, JoinedChannelEventArgs e)
{
e.Channel += MessageReceivedHangman;
}
}
Вариант # 2:
Вместо этого выведите событие «сообщение получено»:
class A
{
public static event EventHandler<IrcMessageEventArgs> AnyChannelMessageReceived;
public static void Channel_MessageReceived(object sender, IrcMessageEventArgs e)
{
// Whatever other code you had here, would remain
EventHandler<IrcMessageEventArgs> handler = AnyChannelMessageReceived;
if (handler != null)
{
handler(null, e);
}
}
}
class B
{
static void SomeMethod()
{
A.AnyChannelMessageReceived += MessageReceivedHangman;
}
}
Непонятно из вашего сообщения, важно ли иметь отправителя оригинального события. Если это так, то IMHO Option #1
лучше, так как он обеспечивает прямой доступ к событию. Однако вы можете изменить Option #2
так, чтобы он прошел sender
обработчику (в Channel_MessageReceived()
), вместо null
, который приведен в примере (null
более идиоматичен для static event
, но не обязательно).
Если ни один из этих вариантов не работает для вас, предоставьте лучший контекст. См. https://stackoverflow.com/help/mcve и https://stackoverflow.com/help/how-to-ask.