Многоадресные делегаты на 70-536 экзамен? - PullRequest
6 голосов
/ 03 мая 2010

Я прохожу некоторые экзаменационные вопросы к экзамену 70-536, и в моих экзаменационных вопросах появился один вопрос, который один разработчик разместил в своем блоге. Я не могу вспомнить, каким был его ответ .... но ниже вопрос:

Вам нужно написать многоадресный делегат, который принимает аргумент DateTime и возвращает bool значение. Какой сегмент кода вы должны использовать?

A: public delegate int PowerDeviceOn(bool, DateTime)

B: public delegate bool PowerDeviceOn(Object, EventArgs)

C: public delegate void PowerDeviceOn(DateTime)

D: public delegate bool PowerDeviceOn(DateTime)

Ответ А.

Может кто-нибудь объяснить, почему? Как я уже провел некоторые исследования в этом вопрос некоторое время назад, и поэтому я был уверен, что это был C, очевидно, теперь ищет назад на вопрос ясно, что я не прочитал должным образом. Как я был уверен Я видел то же самое раньше, поэтому прыгнул к самому очевидному.

Вариация на этот вопрос:

Вам необходимо написать многоадресный делегат, который принимает аргумент DateTime. Какой сегмент кода вы должны использовать?

A: public delegate int PowerDeviceOn(bool, DateTime)

B: public delegate bool PowerDeviceOn(Object, EventArgs)

C: public delegate void PowerDeviceOn(DateTime)

D: public delegate bool PowerDeviceOn(DateTime)

Теперь это еще один вариант ответа на этот вопрос, у него все еще есть те же самые поддельные ответы, поскольку они все еще доброжелательны в отбрасывании экзаменатора. Обратите внимание, что, просто оставив пример ответов одинаковым и удалив небольшую часть текста вопроса, ответ - это C, а не A .

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

Ответы [ 3 ]

5 голосов
/ 03 мая 2010

Прежде всего, по определению, все экземпляры делегатов в .NET являются многоадресными делегатами , даже с фактическими функциями 0 или 1, прикрепленными к ним.

Строго говоря, единственный делегат (многоадресная рассылка избыточна), который соответствует фактическому описанию для задачи 1, это D. Это единственные функции, которые принимает параметр DateTime возвращает bool .

Фактически, ответ А не отвечает требованиям явно или даже концептуально. Если бы параметр bool был параметром ref, он был бы по крайней мере способен возвращать логическое значение вызывающему коду. В существующем состоянии вам нужно проверить, чтобы возвращаемое значение было > 0.

5 голосов
/ 03 мая 2010

Это не очень хорошо сформулированный вопрос. Многоадресный делегат - это когда вы объединили отдельные делегаты в один:

delegate int Foo();
Foo a = () => 5;
Foo b = () => 9;
Foo c = a + b; // c is a multicast delegate

Когда вы вызываете c, он вызывает a, затем b. Он возвращает возвращаемое значение последнего вызванного делегата, поэтому возвращаемое значение для c равно 9.

На мой взгляд, ответ должен быть

public delegate void PowerDeviceOn(DateTime d, CancelEventArgs e)

И если один из методов, на которые указывает делегат, хочет сказать вам «false», они должны установить для e.Cancel значение true. Делегат не может просто вернуть логическое значение, потому что тогда вы получите только ответ последнего делегата.

0 голосов
/ 14 июля 2012

D) публичный делегат bool PowerDeviceOn (DateTime) является правильным

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