读书人

对嘱托和事件的一些地方不太理解

发布时间: 2013-08-01 15:23:18 作者: rapoo

对委托和事件的一些地方不太理解
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 进行操作的三个函数.

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

一般直接写一行代码表示事件的, 都是新手.
[解决办法]


protected virtual void OnAgeChanged 我之前看书说virtual虚拟方法的话,需要被重写,后续我也没看到

需要而且必须被重写的是abstract方法
virtual是可以被重写,但不是必需的,由子类决定

读书人网 >C#

热点推荐