Diseño Pregunta - Evento polimórfica ManejoDiseño Ayuda - Evento polimórfica Manejo
Actualmente estoy tratando de reducir el número de controladores de evento en mi proyecto actual. Tenemos múltiples sistemas que envían datos a través de USB. Actualmente tengo una rutina para leer en los mensajes y analizar los detalles del encabezado inicial para determinar de qué sistema proviene el mensaje. Los encabezados son un poco diferentes, por lo que los EventArgs que creé no son lo mismo. Luego notifico a todos los "observadores" del cambio. Así que lo que tengo en este momento es la siguiente:
public enum Sub1Enums : byte
{
ID1 = 0x01,
ID2 = 0x02
}
public enum Sub2Enums : ushort
{
ID1 = 0xFFFE,
ID2 = 0xFFFF
}
public class MyEvent1Args
{
public Sub1Enums MessageID;
public byte[] Data;
public MyEvent1Args(Sub1Enums sub1Enum, byte[] data)
{
MessageID = sub1Enum;
Data = data;
}
}
public class MyEvent2Args
{
public Sub2Enums MessageID;
public byte[] Data;
public MyEvent2Args(Sub2Enums sub2Enum, byte[] data)
{
MessageID = sub2Enum;
Data = data;
}
}
código de Form1
public class Form1
{
public delegate void TestHandlerCurrentlyDoing(MyEvent1Args eventArgs1);
public delegate void TestHandlerCurrentlyDoingAlso(MyEvent2Args eventArgs2);
public event TestHandlerCurrentlyDoing mEventArgs1;
public event TestHandlerCurrentlyDoingAlso mEventArgs2;
public Form1()
{
mEventArgs1 += new TestHandlerCurrentlyDoing(Form1_mEventArgs1);
mEventArgs2 += new TestHandlerCurrentlyDoingAlso(Form1_mEventArgs2);
}
void Form1_mEventArgs2(MyEvent2Args eventArgs2)
{
// Do stuff here
Sub2Enums mid = my_event2_args.MessageID;
byte[] data = my_event2_args.Data;
}
void Form1_mEventArgs1(MyEvent1Args eventArgs1)
{
// Do stuff here
Sub1Enums mid = my_event1_args.MessageID;
byte[] data = my_event1_args.Data;
}
Y en el algoritmo de análisis sintáctico tengo algo como esto en base al cual el mensaje es:
void ParseStuff()
{
if (mEventArgs1 != null)
{
mEventArgs1(new MyEvent1Args(Sub1Enums.ID1, new byte[] { 0x01 }));
}
if (mEventArgs2 != null)
{
mEventArgs2(new MyEvent2Args(Sub2Enums.ID2, new byte[] { 0x02 }));
}
}
Lo que realmente quiero hacer es esto:
public class Form1
{
public delegate void TestHandlerDesired(MyEvent1Args eventArgs1);
public delegate void TestHandlerDesired(MyEvent2Args eventArgs2);
public event TestHandlerDesired mEventArgs;
public Form1()
{
mEventArgs += new TestHandlerDesired (Form1_mEventArgs1);
mEventArgs += new TestHandlerDesired (Form1_mEventArgs2);
}
}
Y por razones de ambigüedad no podemos hacer esto. Entonces mi pregunta es ¿cuál sería un mejor enfoque para este problema?
Parece una sintaxis de C#. Si es así, considere agregar este detalle a su pregunta. Además, creo que puedes volver a etiquetarlo para tener C# como etiqueta, y entonces tendrás más vistas. –