我正在阅读70-536考试的一些考试题目,并且我的考试问题中出现了一个开发人员在他的博客上发布的实际问题。我不记得他的答案是什么......但下面是问题:
您需要编写一个接受DateTime参数并返回bool的多播委托 值。你应该使用哪个代码段?
答: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参数的多播委托。 你应该使用哪个代码段?
答: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是正确的,但是第一个问题我有一个问题,但是你知道在通过考试时不够好。
答案 0 :(得分:5)
这不是一个措辞很好的问题。多播委托是指将单独的委托合并为一个委托:
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。委托不能只返回一个布尔值,因为那样你只能得到最后一个委托的答案。
答案 1 :(得分:5)
首先,根据定义,.NET中的所有委托实例都是多播委托,即使附加了0或1个实际函数。
严格来说,唯一适合问题1的实际描述的代理(多播是多余的)是D.这是接受DateTime
参数<的唯一函数/ strong>和返回bool 。
事实上,答案A不能明确地或甚至在概念上满足要求。如果bool
参数是ref
参数,则至少能够向调用代码返回布尔值。按照目前的情况,您必须检查返回值是否为> 0
。
答案 2 :(得分:-2)
D)公共代表bool PowerDeviceOn(DateTime)是正确的