c# - 70-536 考试中的多播委托(delegate)?

标签 c# .net delegates

我正在查看 70-536 考试的一些试题,一位开发人员在他的博客上发布的实际问题已经出现在我的试题中。我不记得他的回答是什么....但下面是问题:

您需要编写一个接受 DateTime 参数并返回 bool 值的多播委托(delegate) 值(value)。您应该使用哪个代码段?

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 参数的多播委托(delegate)。 您应该使用哪个代码段?

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 是正确的,但是第一个问题我有一个线索,但正如你所知,一个线索不足以通过考试。

最佳答案

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

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

当您调用 c 时,它会调用 a,然后调用 b。它返回最后调用的委托(delegate)的返回值,因此 c 的返回值为 9。

在我看来,答案应该是

public delegate void PowerDeviceOn(DateTime d, CancelEventArgs e)

如果委托(delegate)指向的方法之一想要告诉您“false”,它们应该将 e.Cancel 设置为 true。委托(delegate)不能只返回一个 bool 值,因为那样你只能得到最后一个委托(delegate)的答案。

关于c# - 70-536 考试中的多播委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759687/

相关文章:

ios - 委托(delegate)/协议(protocol)将数据从一个 View Controller 传递到另一个

c# - Mono C# 编译器和 MS C# 编译器在作用域方面的区别

c# - 如何引用 dotNet Core 项目?

c# - 等待 async Task 函数和在 void 函数中调用 await 有什么区别?

ios - 未调用自定义委托(delegate)方法

objective-c - 为什么我不能将新实例的委托(delegate)设置为 self?

c# - 如何通过索引总结 List<int[]> 或锯齿状数组的每个数组?

c# - 如何在 if 语句之外使用已在 if 语句内声明的变量

c# - 为什么我的下拉菜单不会默认为给定值?

c# - 是否有针对对象的轻型和重型版本的设计模式?