+2  A: 

This is not a very well worded question. A multicast delegate is when you have combined separate delegates into one:

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

When you call c, it invokes a, then b. It returns the return value of the last delegate invoked, so the return value for c is 9.

In my opinion, the answer should be

public delegate void PowerDeviceOn(DateTime d, CancelEventArgs e)

And if one of the methods the delegate is pointing to wants to tell you "false", they should set e.Cancel to true. The delegate can't just return a boolean, because then you'd only get the last delegate's answer.

Matt Greer
thanks for this Matt, this helps alot. So i take it Multicast delegates can return something?? if they do it's returns the object associated with the delegate that has a return type? I understand what you mean about the ordering and etc. I was just thinking if multiple delegates have the same return type, is it fair to assume that value being returned by the M.Delegate will be overwritten? Does that make sense?
IbrarMumtaz
The return value is the return value of the last delegate that is called. Like in my example, c was made out of a and then b. So c calls a, it then calls b. Whatever b returns, that is what c returns, because b came last. If it was `c = b + a`, then whatever a returned would be what c returns.
Matt Greer
+2  A: 

First of all, by definition, all delegate instances in .NET are multicast delegates, even with 0 or 1 actual functions attached to them.

Strictly speaking, the only delegate (multicast being superfluous) that fits the actual description for problem 1 is D. That is the only functions that accepts a DateTime parameter and returns a bool.

In fact, answer A doesn't meet the requirements explicitly or even conceptually. If the bool parameter were a ref parameter, it would at least be capable of returning a boolean value to the calling code. As it stands, you'd have to check that the return value was > 0.

Adam Robinson
thats exactly what I thought:"Strictly speaking, the only delegate (multicast being superfluous) that fits the actual description for problem 1 is D. That is the only functions that accepts a DateTime parameter and returns a bool"My only explaination is that bool can easily be translated to 0,1 values given that you can only have true or false values. There is a basic dot-to-dot relationship that can be drawn but still ... a definitive answer for problem one is proving very very very elusive.
IbrarMumtaz
@IbrarMumtaz: If that's truly the wording of the question, then the answer is simply wrong. I find it odd, however, that the exam would ask you to construct a multicast delegate that returns a value at all, since that's considered bad design.
Adam Robinson
That's because problem one is a bogus question. Even if it did mean to indicate that you return 0 or 1, you are still only getting a 0 or 1 from the last method in the chain.
Matt Greer
@ Matt, I know what you mean. I am dead sure the question is bogus as you have already said. Thanks for replying anyways.
IbrarMumtaz