[英]My code returns a StackOverFlowException when I enter a name… I don't understand why
我的代码的目的是更改“调度程序”对象的名称,尽管这是通过调度程序的name属性的设置器完成的,但它运行OnNameChange()引发事件。
这是我要在其中显示消息的地方运行“ OnDispatcherNameChange”方法的地方(“ Dispatcher的名称更改为”)。
但是,当我运行main并输入名称时,它将返回StackOverFlowException。 我怎样才能解决这个问题?
这是我的代码:
using System;
namespace Excercise_Events
{
public class NameChangeEventArgs : EventArgs
{
public string Name { get; private set; }
public NameChangeEventArgs(string name)
{
this.Name = name;
}
}
public class Dispatcher
{
public string Name
{
get
{
return Name;
}
set
{
var nameChange = new NameChangeEventArgs(Name);
OnNameChange(nameChange);
Name = value;
}
}
public delegate void NameChangeEventHandler(object Source, NameChangeEventArgs args);
public event NameChangeEventHandler NameChange;
protected virtual void OnNameChange(NameChangeEventArgs args)
{
NameChange?.Invoke(this, new NameChangeEventArgs(args.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;
while (true)
{
Console.Write("Enter new Name: ");
string name = Console.ReadLine();
if (name.ToLower() == "end")
{
break;
}
dispatcher.Name = name;
}
}
}
}
名称属性是问题。 您有一个无限循环,在该循环中,setter再次调用该属性以设置另一个值。
更改它以使用后备字段:
private string _name;
public string Name
{
get
{
return _name;
}
set
{
var nameChange = new NameChangeEventArgs(Name);
OnNameChange(nameChange);
_name = value;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.