У меня есть интерфейс, определенный так:
public interface IRipper
{
IRipperHost Host { get; set; }
void Rip(FileStream stream);
event RipperEventHandler OnStart;
event RipperEventHandler OnComplete;
event RipperEventHandler OnProgressChanged;
}
public delegate void RipperEventHandler(object sender, RipperEventArgs e);
и базовый класс, реализующий этот интерфейс
public class RipperBase : IRipper
{
public void Rip(FileStream stream)
{
throw new System.NotImplementedException();
}
public event RipperEventHandler PostRipEvent;
event RipperEventHandler IRipper.OnComplete
{
add
{
if (PostRipEvent != null)
{
lock (PostRipEvent)
{
PostRipEvent += value;
}
}
else
{
PostRipEvent = value;
}
}
remove
{
if (PostRipEvent != null)
{
lock (PostRipEvent)
{
PostRipEvent -= value;
}
}
}
}
... and so on
}
У меня вопрос, как бы вы наследовали от RipperBase и переопределяли метод BaseClass Rip. в действительности эта функция должна быть абстрактной - но я не знаю, как это сделать с интерфейсами.
Также, как я могу вызвать обработчик событий базовых классов из класса, производного от RipperBase? Я попробовал это
RipperEventHandler handler = PreRipEvent;
if (handler != null)
{
handler(this, new RipperEventArgs { Message = "Started Ripping file to CSV!" });
}
handler = RipProgEvent;
это, но я получаю "событие может появляться только в левой части + = или - =." Ошибка
любая помощь будет принята с благодарностью! Я пытаюсь сделать это максимально масштабируемым.