То, как вы хотите это сделать, - немного ходить.Вы пытались написать какой-нибудь реальный пример того, как он будет использоваться в конце (например, какой-нибудь тест)?
Делегат - это тип, и вы не можете переопределить его (или даже наследовать от него).
Я думаю, что вы должны рассматривать событие как нечто одинаковое для всех типов камер, что может измениться, это EventArgs или обработка событий.
Я сделал небольшой пример с обобщениями и простой реализацией, пожалуйста, посмотритеесли это то, что вы хотите сделать.
public abstract class BaseCamera<TEventArgs> where TEventArgs : EventArgs
{
public delegate void FrameArivedEventHandler(object sender, TEventArgs e); //errors
public virtual event FrameArivedEventHandler FrameArivedEvent; //seams fine
protected void Trigger(TEventArgs eventArgs)
{
FrameArivedEvent(this, eventArgs);
}
}
public abstract class FrameArivedEventArgs : EventArgs
{
public int counter;
public byte[] RawRGB;
}
public class NikonCamera : BaseCamera<NikonFrameArrivedEventArgs>
{
public override event FrameArivedEventHandler FrameArivedEvent
{
// Override whatever
add => base.FrameArivedEvent += value;
remove => base.FrameArivedEvent -= value;
}
}
public class NikonFrameArrivedEventArgs : FrameArivedEventArgs
{
public string Message { get; set; }
}
public class TestExampleUsageClass
{
public TestExampleUsageClass()
{
var camera = new NikonCamera();
camera.FrameArivedEvent += MyTestClassFrameArrivedEventHandler;
}
private void MyTestClassFrameArrivedEventHandler(object sender, NikonFrameArrivedEventArgs e)
{
throw new NotImplementedException();
}
}