多播代表参加70-536考试?

Ibr*_*taz 7 .net c# delegates

我正在阅读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)

答案是A.

有人可以解释一下原因吗?因为我前段时间已经对这个问题进行过一些研究,所以我确信它是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,而不是一个.

这个变化没有正式答案,因为我只是用考试问题作为底板来构思它.答案肯定是C.这一次很容易看出为什么C是正确的,但是第一个问题我有一个问题,但是你知道在通过考试时不够好.

Mat*_*eer 5

这不是一个措辞很好的问题.多播委托是指将单独的委托合并为一个委托:

delegate int Foo();
Foo a = () => 5;
Foo b = () => 9;
Foo c = a + b; // c is a multicast delegate
Run Code Online (Sandbox Code Playgroud)

当你调用c时,它会调用a,然后调用b.它返回调用的最后一个委托的返回值,因此c的返回值为9.

在我看来,答案应该是

public delegate void PowerDeviceOn(DateTime d, CancelEventArgs e)

如果委托指向的方法之一想要告诉你"假",那么它们应该设置e.Cancel为true.委托不能只返回一个布尔值,因为那样你只能获得最后一个委托的答案.


Ada*_*son 5

首先,根据定义,.NET中的所有委托实例都是多播委托,即使附加了0或1个实际函数.

严格来说,唯一适合问题1 的实际描述的委托(多播是多余的)是D.这是唯一接受DateTime参数返回bool的函数.

事实上,答案A不能明确地或甚至在概念上满足要求.如果bool参数是一个ref参数,它至少能够将一个布尔值返回给调用代码.就目前而言,你必须检查返回值是什么> 0.