2016-08-24 63 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