using System.Collections.Generic;
using System.Threading.Tasks;
namespace LISTING_2_55_Finding_components
public interface IAccount
void PayInFunds(decimal amount);
bool WithdrawFunds(decimal amount);
public class BankAccount : IAccount
protected decimal balance = 0;
public virtual bool WithdrawFunds(decimal amount)
balance = balance - amount;
void IAccount.PayInFunds(decimal amount)
balance = balance + amount;
decimal IAccount.GetBalance()
public class BabyAccount : BankAccount, IAccount
public override bool WithdrawFunds(decimal amount)
balance = balance - amount;
public static void Main(string[] args)
Assembly thisAssembly = Assembly.GetExecutingAssembly();
List<Type> AccountTypes = new List<Type>();
foreach ( Type t in thisAssembly.GetTypes() )
if(typeof(IAccount).IsAssignableFrom(t))
foreach (Type t in AccountTypes)
Console.WriteLine(t.Name);