2016-08-24 36 views
0

所以,我一直在努力學習C#多一點,但當試圖弄清楚如何正確使用事件時,我遇到了一堵牆。在事件觸發器中發生空異常

不用說,當事件輸入事件的值不爲null時,當事件觸發時,我總是收到一個空引用異常。任何幫助將非常感激。

代碼:

public delegate void performdespoit(int value); 

class Bank 
{ 
    private int savingsGoal = 500; 
    private int balance; 
    //private int deposit; 

    public event performdespoit valueChanged; 
    public event performdespoit savingsReached; 

    public int Dep 
    { 
     set 
     { 
      this.balance = value; 

      this.valueChanged(balance); 

      if (balance > savingsGoal) 
      { 
       this.savingsReached(balance); 
      } 

     } 
    } 
} 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Bank Oldman = new Bank(); 

      string str; // holds response from user 
      int DEP; // holds the value to deposit 

      do 
      { 
       Console.WriteLine("Please enter a numerical value to deposit:"); 
       str = Console.ReadLine(); 
       if (!str.Equals("exit")) 
       { 
        DEP = Convert.ToInt32(str); 
        Oldman.Dep = DEP; 
       } 

      } while (!str.Equals("exit")); 

     } 
     static void valueChanged(int value) 
     { 
      Console.WriteLine("The current balance amount is {0}", value); 
     } 
     static void savingsReached(int value) 
     { 
      //something 
      Console.WriteLine("Something happens"); 
     } 


    } 

} 
+0

有關如何診斷「NullReferenceException」的信息,請參閱標記的副本。如果當你調試好你的代碼時,你可以發佈一個不僅僅是詢問如何避免產生'NullReferenceException'的問題,而是發佈一個新的問題,包括一個可靠地再現問題的好的[mcve],並且解釋你已經完成調試異常以及您嘗試解決該問題時遇到的具體問題。 –

+0

非常感謝彼得。我的問題清楚地說明了我首先提出這個問題的原因。我不明白爲什麼我會得到一個空引用,但這是因爲我對事件缺乏瞭解。這不是從理解什麼是無效的概念。這僅僅是因爲我不知道你將不得不使用+ =來分配事件。 – Sage

回答

0

,當您試圖訪問一些東西,不存在/定義的NullReferenceException會拋出。在你的情況下,你還沒有分配這些事件並試圖觸發它。導致拋出異常。因此,您需要分配以下事件:

Bank Oldman = new Bank(); 
Oldman.valueChanged += new performdespoit(valueChanged); 
Oldman.savingsReached += new performdespoit(savingsReached); 
+0

感謝您的幫助。 – Sage