【问题标题】:C# EXAM Conceptual guidanceC# EXAM 概念指导
【发布时间】:2014-07-23 02:01:53
【问题描述】:

一个我无法理解的问题。答案是 b),但有人能告诉我为什么吗? 我意识到它介于 a) 和 b) 之间。但是为什么是b)?如果事件发起方法是公开的,那么任何人都不能发起事件吗?

您已在班级中声明了一个事件,并且您希望班级的外部用户引发此事件。你做什么工作? 一个。 公开活动。 B. 向您的类添加一个引发事件的公共方法。 C。 使用公共委托而不是事件。 D. 使用自定义事件访问器向外部用户授予访问权限。

【问题讨论】:

  • 问题清楚地说明了这一点:并且您希望班级的外部用户提出事件。很明显,是的,任何人都可以提出它,这就回答了这个问题。
  • 这道题似乎跑题了,因为它是关于考试的,而这道题只是对考试题目的误读或漏读。

标签: c#


【解决方案1】:

这个问题给你两条信息:

  1. 在你的班级声明了一个事件,并且
  2. 希望您班级的外部用户提出此事件。

现在阅读答案,看看它们与提供给您的信息有何关联:

一个。公开活动。

公开活动是否有助于课堂以外的用户发起活动?不,它不会:它允许他们监听您的事件,但不允许他们引发事件。

c。使用公共委托而不是事件。

这是红鲱鱼:声明公共委托是声明事件本身的一部分,因此它无助于外部用户引发事件。

d。使用自定义事件访问器向外部用户授予访问权限。

这类似于回答a:授予用户访问事件的权限并不能帮助他们提出该事件。

b.向您的类添加一个引发事件的公共方法。

这是对这个问题的直接回答:您想让用户提出一个事件,因此您设计了一种方法来准确地做到这一点。

【讨论】:

  • 是的,我同意。谢谢!这不仅让我眼前一亮,还为我提供了解决问题的策略!
【解决方案2】:

a) 和 b) 之间的区别在于,在 C# 中——根据设计/规范——事件只能从声明它们的类中引发,而不是外部代码。

如果您将事件声明为公开,外部代码将能够订阅/取消订阅该事件。但不举。尝试这样做会导致编译器错误。

因此,如果您希望外部代码引发事件,您应该公开一个执行此操作的公共方法。

c) 不是一个很好的答案。这类似于说:公开一个公共字段而不是公共属性。

d) 自定义访问器 ({ add; remove; }) 不会改变任何情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多