簡體   English   中英

如何將同一事件分配給不同的對象?

[英]how to assign same event to different objects?

我正在使用具有OnData事件的組件。 我想用幾乎相同的OnData事件從此組件創建100個對象。

我的代碼是這樣的:

        Tcp[] arrTcp = new Tcp[100];

        for(int i=0; i<100; i++)
        {
            arrTcp[i] = new Tcp();

            arrTcp[i].Data += tcp1_Data;
        }

但是OnData事件在每個tcp對象中有所不同。

    void tcp1_Data(object sender, Dart.Sockets.DataEventArgs e)
    {

        // all code are same except this part :

        if(tcp1)
            Console.WriteLine("tcp1");

        if(tcp2)
            Console.WriteLine("tcp2");

        .....
    }

我不想寫100個事件...任何想法嗎?

有關更多信息:tcp1_Data將通過多線程觸發...

我會做這樣的事情:

var arrTcp = new Tcp[100];

var specificCode = new Dictionary<int, Action<int, Tcp>>()
{
    { 0, (index, tcp) => Console.WriteLine("tcp1") },
    { 1, (index, tcp) => Console.WriteLine("tcp2") },
    // ...
    { 99, (index, tcp) => Console.WriteLine("tcp100") },
};

for (var i = 0; i < 100; i++)
{
    arrTcp[i] = new Tcp();

    var index = i;
    arrTcp[i].Data += (s, e) =>
    {
        // all code are same except for :
        specificCode[index](index, arrTcp[index]);
    };
}

現在,這不是一個很大的改進,只不過它可能使代碼更易於維護。 但是,根據specificCode詞典中代碼的復雜性,維護起來可能更糟。

我懷疑您要在此處解決的問題實際上與為每個事件處理程序編寫自定義代碼無關。 我認為您可能有一個潛在的問題,您認為可以通過這種方式解決。 如果您可以提出另一個與您的基本需求有關的問題,我想我們可以為您提供更多幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM