public class ATM:BankAccount { public override void Withdraw() { Console.WriteLine("ATM BankAccount Withdraw succeed"); } } public abstract class BankAccount { public virtual void Withdraw() { } List<IUser> list = new List<IUser>(); public void AddUser(IUser user) { list.Add(user); } public void Remove(IUser user) { list.Remove(user); } public void Update() { foreach (IUser user in list) user.Update(); } } public interface IUser { void Update(); } public class Emailer:IUser { public void Update() { Console.WriteLine("Emailer update succeed"); } } public class Phoner:IUser { public void Update() { Console.WriteLine("Phoner update succeed"); } }