我的代碼的目的是更改我的“調度程序”對象的名稱,雖然這是通過調度程序的名稱屬性的設置器完成的,但它在我引發事件的地方運行 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;
}
}
- 1 回答
- 0 關注
- 135 瀏覽
添加回答
舉報
0/150
提交
取消