1. 引言
.net事件对于初学者不是很好理解,以下示例帮助初学着理解事件。
2. 事件
定义事件成员的类型允许类型(或类型示例)在某些事情发生时通知其他对象。事件模型建立在委托之上。
3. 案例
假设我们设计的类型myStudent(具有ID与Name属性),当它的任意一个属性发生改变时,提供对外通知的功能。
4. 代码实现
a) myStudent
class myStudent
{
private string id;
public string ID
{
get
{
return id ;
}
set
{
id=value;
/// 对外通知
OnPropertyChanged();
}
}
private string name;
public string Name
{
get
{
return name;
}
set
{
name=value;
/// 对外事件
OnPropertyChanged();
}
}
/// <summary>
/// 定义一个事件成员,以便所有接受事件通知着订阅
/// </summary>
/// <returns></returns>
public event EventHandler PropertyChanged;
/// <summary>
/// 使用virtual 是为了便于派生类改变基类的通知行为
/// </summary>
public virtual void OnPropertyChanged()
{
if(PropertyChanged!=null)
{
PropertyChanged(this,new EventArgs ());
}
}
public override string ToString()
{
return string.Format ("ID:{0} Name:{1}",ID,Name);
}
}
b) 外部订阅事件片段
public static void RunSnippet()
{
myStudent StudentObj=new myStudent();
/// 外部订阅
StudentObj.PropertyChanged+=new EventHandler(OnPropertyChanged);
StudentObj.ID ="001";
StudentObj.Name ="B0b0";
}
//订阅处理
public static void OnPropertyChanged(object sender,EventArgs e)
{
myStudent obj=(myStudent)sender;
Console.WriteLine ("Property Changed:{0}",sender.ToString());
}