为了账号安全,请及时绑定邮箱和手机立即绑定

当我输入名称时,我的代码返回 StackOverFlowException ...我不明白为什么

当我输入名称时,我的代码返回 StackOverFlowException ...我不明白为什么

C#
慕后森 2023-04-29 09:48:03
我的代码的目的是更改我的“调度程序”对象的名称,虽然这是通过调度程序的名称属性的设置器完成的,但它在我引发事件的地方运行 OnNameChange() 。这是我希望“OnDispatcherNameChange”方法在显示消息(“Dispatcher's name changed to”)的地方运行的地方。但是,当我运行 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;            }         }    }}
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

Name 属性是问题所在。您有一个无限循环,其中设置器再次调用该属性以设置另一个值。


将其更改为使用支持字段:


private string _name;


public string Name

{

    get

    {

        return _name; 

    }

    set

    {

        var nameChange = new NameChangeEventArgs(Name);

        OnNameChange(nameChange);


        _name = value; 

     } 

}


查看完整回答
反对 回复 2023-04-29
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信