我知道如何定义委托,也知道如何使用委托,只是不知道为什么在共享委托的时候一定要加一个event关键字,转换成事件,如果不加的话,执行结果也是一样的。

解决方案 »

  1.   

    event这个关键字将会把一般的委托转换为持殊的属性。具有Add和Remove方法的持殊委托属性。
      

  2.   

    加event可以防止已订阅该事件的方法被非法调用.纯委托则不可以.实际上,加了event等于限定了delegate的用途.
      

  3.   

    能不能举个例子,在某某情况下不加event关键字程序不能运行,或结果不同
    事实上作为数据类型来讲,委托类型也可以使用get,set属性访问器来限定啊
      

  4.   

    1、习惯叫法不同,习惯上比较喜欢叫XX事件,比例按钮事件,键盘事件,没有叫按钮委托,TextChanged委托的吧
    2、第二点是刚刚发现的,定义了委托和事件
            public delegate void TestDelegate();
            public TestDelegate MyDelegate;
            public event TestDelegate MyEvent;当输入My时出现的智能提示框前面的小图标不一样,委托的小图标是蓝色方块,事件的小图标是黄色闪电3、第三点正是由第二点才联想到,代码如下:    public partial class UserControl1 : UserControl
        {
            public delegate void TestDelegate();
            public TestDelegate MyDelegate;
            public event TestDelegate MyEvent;        public UserControl1()
            {
                InitializeComponent();
            }
        }
    然后在窗体上加上这个用户控件,在属性事件栏只有MyEvent没有MyDelegate
      

  5.   


    所谓“使用get,set属性访问器来限定”不是还要你写代码嘛,而不是声明给编译器。何况,“get,set”也起不了什么作用。比如用户可以轻易给一个委托赋值null,而对事件这样操作则编译器会给出编译异常。
      

  6.   

    上面我说的“委托”就是指声明为delegate而没有用关键字event来标记的那些委托,而不是指事件不是委托。显然编译器设计者可以对事件做许多自动生成代码和语法检查的工作,可以集20年来微软在windows事件驱动机制(实际上从windows之前,从vb1.0 for dos就开始使用事件驱动来处理鼠标和字符光标了)上的所有规范,而委托只是一个比较低级的原则。
      

  7.   


    就不能给事件赋null了么?