using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Xuwanshan
{
    public class OverdraftEventArgs : EventArgs
    {
        public OverdraftEventArgs(int balance, int qukuan)
        {
            _balance = balance;
            _qukuan = qukuan;
        }
        public int Balance
        {
            get
            {
                return _balance;
            }
        }
        public int QuKuan
        {
            get
            {
                return _qukuan;
            }
        }
        protected int _balance;
        protected int _qukuan;
    }
    public class Account
    {
        public delegate void OverdraftEventHandler(object sender, OverdraftEventArgs e);
        public event OverdraftEventHandler OnOverdraftHandler;
        public Account(int anInitialBalance)
        {
            _balance = anInitialBalance;
        }
        public int Balance
        {
            get
            {
                return _balance;
            }
        }
        public void Deposit(int aDeposit)
        {
            if (aDeposit < 0)
                throw new ArgumentOutOfRangeException();
            _balance +=  aDeposit;
        }
        public bool Qukuan(int aDebit)
        {
            if (aDebit < 0)
                throw new ArgumentOutOfRangeException();
            if (aDebit < _balance)
            {
                _balance -=  - aDebit;
                return true;
            }
            OverdraftEventArgs args = new OverdraftEventArgs(_balance, aDebit);
            OnOverdraft(args);
            return false;
        }
        public void AddOnOverdraft(OverdraftEventHandler handler)
        {
            OnOverdraftHandler += handler;
        }
        protected void OnOverdraft(OverdraftEventArgs e)
        {
            if (OnOverdraftHandler != null)
                OnOverdraftHandler(this, e);
        }
        protected int _balance;
    }
    public class Moni
    {        public static void Main()
        {
            Account myAccount = new Account(100);
            Account.OverdraftEventHandler handler = null;
            handler = new Account.OverdraftEventHandler(OnOverdraft);
            myAccount.AddOnOverdraft(handler);
        }
            public static void OnOverdraft(object sender, OverdraftEventArgs e)
            {
                Console.WriteLine("an overdraft occurred.");
                Console.WriteLine("the account balance is {0}.", e.Balance);
                Console.WriteLine("qu kuan shi {0}.", e.QuKuan);
            }
     }
            
    }
    
请大家帮我看一下,谢谢

解决方案 »

  1.   

    你在用
                if (OnOverdraftHandler != null) 
                    OnOverdraftHandler(this, e); 
    产生事件,而你在main里订阅的事件是OverdraftEventHandler。看出问题了吗?名称中的Event。你命名的时候写得清楚一点就好啦。而且
    public delegate void OverdraftEventHandler(object sender, OverdraftEventArgs e); 
    一般写在类的外面,不要放到Account里面。