zoukankan      html  css  js  c++  java
  • 接口里为什么不能包含委托 Timothy

    接口里为什么可以有事件,而不能包含和事件息息相关的委托呢?

    先测试一下如果在接口里面包含一个委托会有什么反应。

    在接口里添加一个委托后,编译的时候编译器会提示“接口不能包含类型定义”。

    原因很明确:接口的使命就是对外公布它可以完成什么样的功能,仅仅是告诉其他的使用者它可以做什么,某些程度上来说是接口只能包含方法。

    而一个像“delegate void TestDelegate();”委托的声明实际上像是一个宏的使用,编译的时候由编译器负责把这一个语句扩展成一个继承于MulticastDelegate类的类声明。然后在使用接口的时候“TestDelegate test = new TestDelegate(Test);”实际上就是在构造一个类TestDelegate的对象。

    类里面可以包含类型声明,所以类里面可以包含委托,但是接口里面不能。

    但是为什么接口里面可以包含事件和索引器呢?

    实际上一个事件的声明在编译后就转变成了两个方法,Add_XXX()和Remove_XXX()方法,这两个方法用于往事件里面添加或移除响应事件的方法。而索引器则更是一个像GetItem(int index)方法的简写形式。

    转载自csdn

  • 相关阅读:
    [CF1398A-E] Codeforces Round 93
    bzoj3758 数数和bzoj3798 特殊的质数
    P4234 最小差值生成树
    [UOJ274] P6664 温暖会指引我们前行
    P4172 [WC2006]水管局长
    bzoj2959 长跑
    bzoj4998 星球联盟(lct+并查集维护动态双连通性)
    P1501 [国家集训队]Tree II
    link-cut-tree
    fhq-treap,splay 模板
  • 原文地址:https://www.cnblogs.com/haiyang1985/p/1424524.html
Copyright © 2011-2022 走看看