Делегат C# инстанцирование по сравнению только с передачей ссылки метода

У меня есть простой вопрос: что преимуществом инстанцирования является делегат C# в противоположность просто передаче ссылки на функцию? То, что я имею в виду:

Почему сделайте:

Thread t = new Thread(new ThreadStart(SomeObject.SomeMethod));

Когда можно сделать:

Thread t = new Thread(SomeObject.SomeMethod);

Оба будут компилировать и работать, по моему опыту..., я пропускаю что-то?

10
задан jason 2 February 2010 в 01:22
поделиться

3 ответа

Пока группа методов SomeObject.SomeMethod имеет метод с типом возврата void и не принимает параметров, разница отсутствует. Это связано с тем, что ThreadStart определяется как делегат, который возвращает void и не принимает параметров, и поэтому происходит неявное преобразование из группы методов SomeObject.SomeMethod в ThreadStart. Таким образом, оба метода вызывают перегрузку ThreadStart конструктора Thread .

Соответствующим разделом спецификации языка является §6.6 (Групповые преобразования методов).

У меня возникает простой вопрос: в чем преимущество инстанцирования делегата C# по сравнению с простой передачей ссылки на функцию?

Итак, просто исправление терминологии. С

class MyObject {
    public void SomeMethod() { }
}

MyObject someObject = new MyObject();

вещь, обозначаемая someObject.SomeMethod - это группа методов. Вы можете просто подумать о ней, как о наборе перегруженных методов, которые можно посмотреть, используя обозначение someObject.SomeMethod.

6
ответ дан 4 December 2019 в 01:30
поделиться

Компилятор сделает вывод, что когда вы набирали более короткий код, вы имели в виду более длинный. Нет никакой разницы в конечном результате. Если вы хотите ясности полного конструктора, вы можете вставить его; если вы хотите краткости только группы методов, вы можете позволить компилятору сделать вывод о конструкторе. Это просто стилистический выбор.

4
ответ дан 4 December 2019 в 01:30
поделиться

Это эквивалентно. Хорошая вводная статья на эту тему: C# Делегаты, анонимные методы и выражения лямбды - O My!

0
ответ дан 4 December 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: