using System;
public class NameChangeEventArgs : EventArgs
{
public string Name { get; private set; }
public NameChangeEventArgs(string name)
{
this.Name = name;
}
}
public class Dispatcher
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
OnNameChange(_name);
_name = value;
}
}
public event EventHandler<NameChangeEventArgs> NameChange;
protected virtual void OnNameChange(string name)
{
NameChange?.Invoke(this, new NameChangeEventArgs(name));
}
}
public class Handler
{
public void OnDispatcherNameChange(object Source, NameChangeEventArgs args)
{
Console.WriteLine("Dispatcher's name changed to {0}", args.Name);
}
}
class Program
{
static void Main(string[] args)
{
var dispatcher = new Dispatcher();
var handler = new Handler();
dispatcher.NameChange += handler.OnDispatcherNameChange;
var name = "Sidd";
dispatcher.Name = name;
}
}
我的代码的目的是将Dispatcher的名称更改为传递给它的名称,但是在完成此操作的同时,引发了一个事件,以运行Handler类中的方法来显示将Dispatcher更改为的名称。
调用“ OnDispatcherNameChange(对象源,NameChangeEventArgs args)”以在我的调度员的设置器中显示消息“调度员的名称已更改为”。
但是,它输出的却是...
Dispatcher's name changed to
Press any key to continue...
我做错了什么?
答案 0 :(得分:1)
我认为这是因为您在更改媒体资源之前要举报该事件。 接收事件的代码将读取旧名称,而不会注意到新名称。
尝试执行以下操作:
set
{
// First change the property
_name = value;
// Then raise the event
OnNameChange(_name);
}