Entrambe queste classi contengono un'altra classe privata che genera eventi. Queste due classi poi ribadiscono questi eventi ai clienti.Come si refactoring due classi con gli stessi eventi duplicati?
Purtroppo, ciascuna delle due classi ha questo stesso codice esatto:
public class FirstClass
{
public delegate void FooEventHandler(string foo);
public delegate void BarEventHandler(string bar);
public delegate void BazEventHandler(string baz);
public event FooEventHandler Foo;
public event BarEventHandler Bar;
public event BazEventHandler Baz;
private PrivateObject privateObject;
public FirstClass()
{
privateObject.Foo += FirstClass_Foo;
privateObject.Bar += FirstClass_Bar;
privateObject.Baz += FirstClass_Baz;
}
private void FirstClass_Foo(string foo)
{
if (Foo != null)
{
Foo(foo);
}
}
private void FirstClass_Bar(string bar)
{
if (Bar != null)
{
Bar(bar);
}
}
private void FirstClass_Baz(string baz)
{
if (Baz != null)
{
Baz(baz);
}
}
}
Come potete vedere, devo ri-generare eventi da un oggetto privato. È ridondante. Ho provato ad utilizzare l'ereditarietà e l'immissione di questo codice duplicato in una classe base, ma continuo a ricevere errori come:
L'evento 'BaseClass.Foo' possono essere visualizzati solo sul lato sinistro del + = o - = (tranne quando utilizzato all'interno del tipo)
Qualcuno sa come sbarazzarsi di questo codice duplicato?
È meglio che non usa OnEvent per il nome del vostro evento. OnEvent è il nome standard per il metodo di innalzamento/attivazione dell'evento. Altrimenti sono d'accordo con l'idea della tua risposta. –
grazie mille per la correzione :) – Andrea
Andrea: Grazie per la risposta! Sfortunatamente sto avendo un po 'di problemi a seguire esattamente cosa fa questo codice. Non ho mai nemmeno sentito parlare delle parole chiave 'add' e' remove 'o_O potresti spiegare questo codice un po '? –