Когда полезно определять своих собственных делегатов вместо использования обобщений? - PullRequest
1 голос
/ 20 мая 2010

Я просматривал какой-то старый код, где я встретил несколько пользовательских делегатов, которые используются следующим образом:

    private delegate void ListenDelegate(UdpClient listener, bool multicast);
    private void ListenOn(UdpClient listener, bool multicast)
    {
        new ListenDelegate(_ListenLoop).BeginInvoke(listener, multicast, null, null);

    }

С некоторыми из новых версий .NET Framework вы можете делать следующее:

    private void ListenOn(UdpClient listener, bool multicast)
    {
        new Action<UdpClient, bool>(_ListenLoop).BeginInvoke(listener, multicast, null, null);
    }

Это должно быть точно так же. Есть ли смысл определять своих собственных делегатов, когда общие делегаты, кажется, выполняют ту же работу с меньшим пространством? Или я что-то упустил из-за дженериков, которые делают их не эквивалентными?

Ответы [ 2 ]

1 голос
/ 20 мая 2010

Я склонен использовать их, когда вложено много обобщенных элементов, а обобщенный делегат становится совершенно нечитаемым. Или когда имена параметров не могут быть легко выведены читателем. Action<string, string, string> ничего не говорит о том, что он хочет, если нет имен параметров.

1 голос
/ 20 мая 2010

Вряд ли когда-либо - в основном, когда нет универсального.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...