c# event

来源:百度知道 编辑:UC知道 时间:2024/04/27 13:30:49
public Class CurrentTime_NowChanged
{
public CurrentTime_NowChanged
{
_timer = new System.Windows.Fomrs.Timer();
_timer.Interval = 1000;
_timer.Start();
}
public DataTime Now
{
get{return _now;}
set
{
if(_now !=value)
now = value;
OnNowChanged(EventArgs.Empty);
}
}

public event HandlerEvent NowChanged;
protected void OnNowChanged(EventArgs e)
{
if(NowChanged!=null)
NowChanged(this,e);
}
private void Timer_Tick(object sender,EventArgs e)
{
this.Now = DateTime.Now;
}
}
其中 NowChanged 是怎么被触发的,事件应该要有方法体可是这个没有方法.
但问题是这个事件没有方法体却被执行了?属性Now更改后它执行的是什么动作
合情合理则加另加50分
原始代码为:
CurrentTime_NowChanged currentTime_NowChanged = new CurrentTime_NowChanged();

在private void Timer_Tick(object sender,EventArgs e)
{
this.Now = DateTime.Now;
}
执行this.Now = DateTime.Now;的时候,this.Now中的set方法调用了
OnNowChanged(EventArgs.Empty);

触发动作是在这里发生的,但是这个事件的确没有方法体,所以NowChanged=null,所以就没有执行委托事件NowChanged中的方法
protected void OnNowChanged(EventArgs e)
{
if(NowChanged!=null)
NowChanged(this,e);
}

NowChanged是通过NowChanged(this,e)触发的.
触发后的处理方法的确没有,因为你没写啊!写上就完了(你的代码错误极其多,不知道你是如何执行的,以下应该是你的本意):
public partial class Form1 : Form
{
private DateTime _now;
public event EventHandler NowChanged;

public Form1()
{
InitializeComponent();
NowChanged += new EventHandler(Handler1);
_timer = new Timer();
_timer.Interval = 1000;
_timer.Start();
}
public DateTime Now
{
get { return _now;