Câu hỏi thiết kế - Xử lý sự kiện đa hìnhTrợ giúp thiết kế - Xử lý sự kiện đa hình
Tôi hiện đang cố gắng giảm số lượng Xử lý sự kiện trong dự án hiện tại của mình. Chúng tôi có nhiều hệ thống gửi dữ liệu qua USB. Tôi hiện đang có một thói quen để đọc trong các tin nhắn và phân tích các chi tiết tiêu đề ban đầu để xác định hệ thống thông điệp đến từ đâu. Các tiêu đề có một chút khác biệt, do đó EventArgs tôi tạo ra không giống nhau. Sau đó, tôi thông báo cho tất cả "người quan sát" về sự thay đổi. Vì vậy, những gì tôi có ngay bây giờ là như sau:
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;
}
}
đang 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;
}
Và trong thuật toán phân tích cú pháp tôi có một cái gì đó như thế này trên cơ sở đó thông điệp đó là:
void ParseStuff()
{
if (mEventArgs1 != null)
{
mEventArgs1(new MyEvent1Args(Sub1Enums.ID1, new byte[] { 0x01 }));
}
if (mEventArgs2 != null)
{
mEventArgs2(new MyEvent2Args(Sub2Enums.ID2, new byte[] { 0x02 }));
}
}
Điều tôi thực sự muốn làm là:
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);
}
}
Và vì lý do mơ hồ, chúng tôi không thể làm điều này. Vì vậy, câu hỏi của tôi là những gì sẽ là một cách tiếp cận tốt hơn cho vấn đề này?
Dường như cú pháp C#. Nếu có, hãy cân nhắc thêm chi tiết này vào câu hỏi của bạn. Ngoài ra, tôi nghĩ bạn có thể gắn thẻ lại để có C# dưới dạng thẻ và sau đó bạn sẽ có nhiều lượt xem hơn. –