亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我輸入名稱時,我的代碼返回 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 關注
  • 135 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號