using System; using System.Collections; public class BankAccount { private double interestRate; private string owner; private decimal balance; private long accountNumber; private static long nextAccountNumber = 0; private static ArrayList accounts = new ArrayList(); public BankAccount(string owner): this(owner, 0.0) { } public BankAccount(string owner, double interestRate) { nextAccountNumber++; accounts.Add(this); this.accountNumber = nextAccountNumber; this.interestRate = interestRate; this.owner = owner; this.balance = 0.0M; } public override bool Equals(Object obj){ if (obj == null) return false; else if (this.GetType() != obj.GetType()) return false; else if (ReferenceEquals(this, obj)) return true; else if (this.accountNumber == ((BankAccount)obj).accountNumber) return true; else return false; } public override int GetHashCode(){ return (int)accountNumber ^ (int)(accountNumber >> 32); // XOR of low orders and high orders bits of accountNumber // (of type long) according to GetHashCode API recommendation. } public decimal Balance () { return balance; } public static long NumberOfAccounts (){ return nextAccountNumber; } public static BankAccount GetAccount (long accountNumber){ foreach(BankAccount ba in accounts) if (ba.accountNumber == accountNumber) return ba; return null; } public void Withdraw (decimal amount) { balance -= amount; } public void Deposit (decimal amount) { balance += amount; } public void AddInterests() { balance = balance + balance * (decimal)interestRate; } public override string ToString() { return owner + "'s account, no. " + accountNumber + " holds " + + balance + " kroner"; } }