none
關於delegate 委派功能跑不出來 !! RRS feed

  • 問題

  • 這次我寫了一個程式 , 內含一個事件 , 當輸入的薪資超出限定範圍時 , 會觸發事件顯示警告訊息 , 但編譯時輸入錯誤的薪資時卻沒有任何提示的訊息出現 , 請各位前輩指出這事件哪裡錯了 , 謝謝

    namespace ex3 { delegate void ShowError(string n, int m); class Emplyee { private int _salary; public string Ename; public event ShowError Show; public int Salary { get { return _salary; } set { if (value > 40000 || value < 20000) { if (Show != null) Show(Ename, value); } else { _salary = value; } } } } class Program { static void Main(string[] args) { Console.Write("請輸入員工人數:"); int n = int.Parse (Console.ReadLine()) ; Emplyee [] emp = new Emplyee [n]; for(int i=0 ; i< n ; i++){ emp[i] = new Emplyee(); Console.Write("第{0}位員工姓名:", i + 1); emp[i].Ename = Console.ReadLine(); Console.Write("第{0}位員工薪資:", i + 1); emp[i].Salary = int.Parse (Console.ReadLine()); emp[i].Show += new ShowError(CallShow); } Console.WriteLine(); Console.Write("請輸入欲查詢的員工姓名:"); string s_name ; int s_num = -1; s_name = Console.ReadLine(); for(int i=0; i< n; i++){ if (s_name == emp[i].Ename){ s_num = i; break ; } } if (s_num == -1){ Console.WriteLine("找不到{0}", s_name); }else{ Console.WriteLine("找到第{0}位員工{1}", s_num + 1, s_name); } Console.ReadLine(); } static void CallShow(string n, int m) //輸入錯誤薪資時卻無法觸發這個事件 !!

    { Console.Write("{0}員工薪水設為{1},結果錯誤,無法設定成功", n, m); Console.WriteLine("薪水必須介於20000到40000之間"); } } }



    • 已編輯 阿燦 2015年10月20日 下午 12:29
    2015年10月20日 下午 12:27

解答

  • 因為執行順序

    你的CallShow還沒有委派給 你的事件Show

    你卻先Set了

    emp[i].Show += new ShowError(CallShow);
    emp[i].Salary = int.Parse (Console.ReadLine());

    2015年10月20日 下午 12:44

所有回覆

  • 因為執行順序

    你的CallShow還沒有委派給 你的事件Show

    你卻先Set了

    emp[i].Show += new ShowError(CallShow);
    emp[i].Salary = int.Parse (Console.ReadLine());

    2015年10月20日 下午 12:44
  • 原來如此 ! 感謝大大 !!

    又讓我學到寶貴的經驗 !!

    2015年10月20日 下午 12:54