У меня есть класс журнала, с которого я хочу инициировать события. Событие расположено в моем базовом классе. Пока я звоню из базового класса, он работает нормально. Моя проблема заключается в "внешних" называет:Триггерные события из внешнего класса
Мой базовый класс:
public delegate void StatusUpdateHandler(object sender, object arg);
public interface IFoo
{
event StatusUpdateHandler OnStatusChanged;
}
public class Foo : IFoo
{
public event StatusUpdateHandler OnStatusChanged;
}
Мой метод класса журнала (в другом классе):
public void Log(string logMessage, StatusUpdateHandler updateHandler)
{
logEntries.Add(logMessage);
if (updateHandler == null)
return;
updateHandler(this, logMessage);
}
Вызов метод из Foo
работает отлично :
loggerInstance.Log("test", OnLogMessage);
Но когда я делаю вызов из-за пределов класса я получаю эту ошибку компиляции:
void OutsideFooLog(IFoo foo)
{
loggerInstance.Log("test", foo.OnLogMessage)
}
// The event 'OnLogMessage' can only appear on the left hand side of += or -=
Моя цель здесь, чтобы вызвать OnLogMessage
в Foo
всякий раз, когда я делаю запись в журнале, независимо от того, я вхожу внутри или вне самого класса. Причина, по которой я хочу это как параметр, состоит в том, что у меня есть несколько других событий.
Вы не можете получить доступ к событиям из других классов. Вам придется обернуть их методами, которые поднимут события, и использовать методы в качестве аргумента или что-то подобное (например, использовать enum и событие пожара из инструкции 'switch') –