Являются делегаты не только краткими интерфейсами?

для принудительного использования SSL с Apache .htaccess вы можете использовать

SSLOptions +StrictRequire
SSLRequireSSL

для перенаправления вышеуказанного ответа правильно

10
задан Michiel Borkent 18 September 2008 в 19:20
поделиться

10 ответов

Существуют незначительные различия, делегаты могут получить доступ к членским переменным классов, в которых, они определяются. В C# (в отличие от Java) весь внутренний класс, считают статичными. Поэтому, если Вы используете интерфейс для управления обратным вызовом, например, ActionListener для кнопки. Реализующий внутренний класс должен быть передан (через конструктора) ссылки на части содержания класса, что это, возможно, должно взаимодействовать с во время обратного вызова. У делегатов нет этого ограничения, поэтому уменьшает объем кода, требуемый реализовать обратный вызов.

Короче, более краткий код является также достойным преимуществом.

14
ответ дан 3 December 2019 в 16:11
поделиться

С точки зрения Разработки программного обеспечения Вы правы, делегаты во многом как функциональные интерфейсы в этом, они моделируют функциональный интерфейс.

Они могут также использоваться очень в том же способе: вместо того, чтобы передать целый класс в этом содержит метод, Вам нужны Вы, может передать в просто делегате. Это сохраняет много кода и создает намного больше читаемого кода.

Кроме того, с появлением лямбда-выражений они могут теперь также быть определены легко на мухе, которая является огромной премией. В то время как ВОЗМОЖНО создать классы на лету в C#, это - действительно огромная боль в торце.

Сравнение этих двух является интересным понятием. Я ранее не рассмотрел, сколько одинаково идеи от варианта использования и кода, структурирующего точку зрения.

6
ответ дан 3 December 2019 в 16:11
поделиться

Делегат действительно совместно использует много вместе с интерфейсной ссылкой, которая имеет отдельный метод с точки зрения вызывающей стороны.

В первом примере Baz и Панель являются классами, которые можно наследовать и инстанцировать. Во втором примере Baz и Панель являются методами.

Вы не можете применить интерфейсные ссылки на просто никакой класс, который соответствует интерфейсному контракту. Класс должен явно объявить, что поддерживает интерфейс. Можно применить ссылку делегата на любой метод, который соответствует подписи.

Вы не можете включать статические методы в контракт интерфейса. (Хотя можно соединить болтом статические методы для с дополнительными методами). Можно обратиться к статическим методам со ссылкой делегата.

3
ответ дан 3 December 2019 в 16:11
поделиться

Нет, делегаты для указателей метода. Затем можно удостовериться, что подпись метода связанный w/делегат корректна.

Кроме того, затем Вы не должны знать структуру класса. Таким образом, можно использовать метод, который Вы записали, чтобы передать в метод в другом классе и определить функциональность, которую Вы хотите иметь, происходят.

Смотрите на Список <> класс с методом Находки. Теперь Вы добираетесь для определения то, что определяет - ли что-то соответствие или нет, не требуя, чтобы объекты, содержавшиеся в классе, реализовали IListFindable или что-то подобное.

1
ответ дан 3 December 2019 в 16:11
поделиться

Можно передать делегатов как параметры в функциях (Хорошо технически, делегаты становятся объектами при компиляции, но это не точка здесь). Вы могли передать объект в качестве параметра (очевидно), но затем Вы связываете тот тип объекта к функции в качестве параметра. С делегатами можно передать любую функцию для выполнения в коде, который имеет ту же подпись независимо от того, куда это прибывает из.

1
ответ дан 3 December 2019 в 16:11
поделиться

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

1
ответ дан 3 December 2019 в 16:11
поделиться

Да, делегат может считаться интерфейсом с одним методом.

0
ответ дан 3 December 2019 в 16:11
поделиться

Делегат является введенным указателем метода. Это дает Вам больше гибкости, чем интерфейсы, потому что можно использовать в своих интересах ковариантность и контравариантность, и можно изменить объектное состояние (необходимо было бы раздать этот указатель с основанными на интерфейсе функторами).

Кроме того, у делегатов есть много хорошего синтаксического сахара, который позволяет Вам делать, вещам нравится, комбинируют их вместе легко.

0
ответ дан 3 December 2019 в 16:11
поделиться

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

Делегаты были вдохновлены (частично) из-за черной магии указателей метода C++, являющихся несоответствующим в определенных целях. Классический пример реализует механизм передачи сообщений или обработки событий. Делегаты позволяют Вам определять сигнатуру метода без любого ведома типов или интерфейсов класса - я мог определить "пустой eventHandler (Событие* e)" делегируют и вызывают его на любой класс, который реализовал его.

Для некоторого понимания этой классической проблемы, и почему делегаты являются желательным чтением это и затем это.

0
ответ дан 3 December 2019 в 16:11
поделиться

По крайней мере в одном предложении по добавлению закрытий (т.е. анонимные делегаты) к Java, они эквивалентны интерфейсам с единственным членским методом.

0
ответ дан 3 December 2019 в 16:11
поделиться
Другие вопросы по тегам:

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