既然我们有多播委托,为什么还需要事件呢?

grv_9098

我在一次采访中被问到这个问题,要么我患有脑锁,要么只是愚蠢,但我没有答案。

克林特

我们需要事件的几个原因:

  • 限制范围,您不想公开您的事件,就像您可以为您的代表公开。
  • 您可以将事件作为接口中的字段而不是委托

下面的例子:

Class Printer
{
    public event EventHandler Print;

    public void Start()
    {
        OnPrint();
    }

    protected virtual void OnPrint()
    {
        Print?.Invoke(this,EventArgs.Empty);
    }
}
class Program
{
    static void Main(string[] args)
    {
        //When Print is an EventHander
        var printer = new Printer();
        printer.Print += PrintEvent;
        printer.Start();

        //If Print was a delegate this is possible, else you get compile time errors 
        printer.Print(null,null); // Events will not allow to have a direct invoke 
        printer.Print = null; //You cannot assign a null to an Event Handler
    }
    private static void PrintEvent(object sender, EventArgs e)
    {
        System.Console.WriteLine("Printing event");
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果我们有 <!DOCTYPE html>,为什么还需要 <html> 标签?

来自分类Dev

当我们有组件时,为什么还需要服务?

来自分类Dev

当我们已经有了更强大的向量时,为什么还需要堆栈?

来自分类Java

除了测试,为什么我们还需要匕首2?

来自分类Dev

当我们有ViewModels时,我们还需要onSaveInstanceState()吗?

来自分类Java

为什么我们需要事后声明?

来自分类Dev

如果我们可以使用Selenium,为什么还需要像BeautifulSoup这样的解析器?

来自分类Dev

如果我们还需要包含标准库头文件,为什么还要指定命名空间?

来自分类Dev

如果我们可以更改线程池使用的线程数,为什么还需要节点集群?

来自分类Dev

既然已经声明了类,为什么还需要使用元素?

来自分类Dev

番石榴 LoadingCache.refresh - 如果我们可以只使用 Cache.invalidate,为什么还需要它?

来自分类Dev

我们还需要为 NPM 预编译包做所有这些努力吗?

来自分类Dev

如果我已经有了 Kubernetes(或 mesos),为什么还需要使用 Spring Cloud?

来自分类Dev

为什么我们要指定一个委托和一个事件,为什么不只在C#中使用一个事件呢?

来自分类Dev

我们在React挂钩中还需要功能setState方法吗?

来自分类Dev

我们是否还需要为按字段排序的集合设置索引?

来自分类Dev

我们还需要HTML5中的斜杠吗?

来自分类Dev

我们还需要“新安置”和“新经营者”吗?

来自分类Dev

当我们在类中定义委托时,有什么区别呢?

来自分类Dev

除了没有聚合函数的列之外,我们还需要在列上选择聚合函数时使用 GROUP BY 吗?

来自分类Dev

组播路由,为什么我们需要pimreg接口?

来自分类Dev

为什么我们只将239.0.0.0/8用于多播地址?

来自分类Dev

如果我们使用notify_one()唤醒线程,在C ++中是否还需要yield()?

来自分类Dev

我们是否还需要在C#代码和存储过程中都应用Sql Transaction?

来自分类Dev

我们还需要使用&pound;吗?或&#163; 而不是在HTML中使用英镑符号?

来自分类Dev

为什么我们在extjs中需要childEls-在哪里使用呢?

来自分类Dev

为什么我们可以对类本身进行操作,但又需要接口呢?

来自分类Java

如果我们已经有了Eclipse,为什么我们需要Maven或Ant?

来自分类Dev

如果我们已经有了CONTAINS,为什么我们需要FREETEXT?

Related 相关文章

  1. 1

    如果我们有 <!DOCTYPE html>,为什么还需要 <html> 标签?

  2. 2

    当我们有组件时,为什么还需要服务?

  3. 3

    当我们已经有了更强大的向量时,为什么还需要堆栈?

  4. 4

    除了测试,为什么我们还需要匕首2?

  5. 5

    当我们有ViewModels时,我们还需要onSaveInstanceState()吗?

  6. 6

    为什么我们需要事后声明?

  7. 7

    如果我们可以使用Selenium,为什么还需要像BeautifulSoup这样的解析器?

  8. 8

    如果我们还需要包含标准库头文件,为什么还要指定命名空间?

  9. 9

    如果我们可以更改线程池使用的线程数,为什么还需要节点集群?

  10. 10

    既然已经声明了类,为什么还需要使用元素?

  11. 11

    番石榴 LoadingCache.refresh - 如果我们可以只使用 Cache.invalidate,为什么还需要它?

  12. 12

    我们还需要为 NPM 预编译包做所有这些努力吗?

  13. 13

    如果我已经有了 Kubernetes(或 mesos),为什么还需要使用 Spring Cloud?

  14. 14

    为什么我们要指定一个委托和一个事件,为什么不只在C#中使用一个事件呢?

  15. 15

    我们在React挂钩中还需要功能setState方法吗?

  16. 16

    我们是否还需要为按字段排序的集合设置索引?

  17. 17

    我们还需要HTML5中的斜杠吗?

  18. 18

    我们还需要“新安置”和“新经营者”吗?

  19. 19

    当我们在类中定义委托时,有什么区别呢?

  20. 20

    除了没有聚合函数的列之外,我们还需要在列上选择聚合函数时使用 GROUP BY 吗?

  21. 21

    组播路由,为什么我们需要pimreg接口?

  22. 22

    为什么我们只将239.0.0.0/8用于多播地址?

  23. 23

    如果我们使用notify_one()唤醒线程,在C ++中是否还需要yield()?

  24. 24

    我们是否还需要在C#代码和存储过程中都应用Sql Transaction?

  25. 25

    我们还需要使用&pound;吗?或&#163; 而不是在HTML中使用英镑符号?

  26. 26

    为什么我们在extjs中需要childEls-在哪里使用呢?

  27. 27

    为什么我们可以对类本身进行操作,但又需要接口呢?

  28. 28

    如果我们已经有了Eclipse,为什么我们需要Maven或Ant?

  29. 29

    如果我们已经有了CONTAINS,为什么我们需要FREETEXT?

热门标签

归档