日期:2014-05-17  浏览次数:21130 次

对委托和事件的一些地方不太理解
public delegate void PersonHandler(object sender, PersonEventArgs e);

public class Person
    {
        private string name;
        private int age;
 
        public event PersonHandler AgeChanged;
        protected virtual void OnAgeChanged( PersonEventArgs e )
        {
            if (AgeChanged != null)
                AgeChanged( this, e );
        }
//后续的不贴了

public event PersonHandler AgeChanged;  这句不理解,event 是类型吗?
我只看到过public string str;这样的写法, 上面这句有4个单词,我就不理解了

protected virtual void OnAgeChanged  我之前看书说virtual虚拟方法的话,需要被重写,后续我也没看到
有重写的过程额,如果不需要重写,为什么又要写virtual呢?

我是菜鸟,请各位指教一下,谢谢


------解决方案--------------------
上面两个AgeChanged 你完全可以理解为是相同的  之所以后者需要加event关键字修饰  为了不允许AgeChanged在类外面使用  在类外时 只能让它出现在+= -=的左边  

AgeChanged 和 OnAgeChanged没有必然联系  之所以这样写  都是因为 微软官方命名是这样的规律而已  一般OnEvent 这样的虚方法中激发Event这样的事件   之所以声明为virtual  为了方便派生类重写激发事件的逻辑
------解决方案--------------------
public event EventHandler Some;

event 是一个语法糖, 实际的样子是这样的:

EventHandler _delegate;
public event EventHandler Some
{
//
  add() {}
  remove() {}
  raise() {}
}

就是说, Some 事件只不过是对 _delegate 进行操作的三个函数.

这样你就看出 事件和代理有什么区别了.

一般直接写一行代码表示事件的, 都是新手.
------解决方案--------------------