public static void Main()
Console.WriteLine("\n\nDependency Inversion Principle Demo ");
ITransferSource source = new BankAccount();
source.AccountNumber = 123456789;
Console.WriteLine("Balance in Source Account : " + source.AccountNumber + " Amount " + source.Balance);
ITransferDestination destination = new BankAccount();
destination.AccountNumber = 987654321;
Console.WriteLine("Balance in Destination Account : " + destination.AccountNumber + " Amount " + destination.Balance);
ITransferAmount transferAmount = new TransferAmounts();
transferAmount.Amount = 100;
transferAmount.Transfer(source, destination);
Console.WriteLine("Transaction successful");
Console.WriteLine("Balance in Source Account : " + source.AccountNumber + " Amount " + source.Balance);
Console.WriteLine("Balance in Destination Account : " + destination.AccountNumber + " Amount " + destination.Balance);
public interface ITransferSource : ITransfer
void RemoveFunds(decimal amount);
public interface ITransferDestination : ITransfer
void AddFunds(decimal amount);
public interface ITransfer
long AccountNumber{get;set;}
decimal Balance{get;set;}
public class BankAccount: ITransferSource, ITransferDestination
public long AccountNumber { get; set; }
public decimal Balance { get; set; }
public void AddFunds(decimal amount)
public void RemoveFunds(decimal amount)
public interface ITransferAmount
decimal Amount { get; set; }
void Transfer(ITransferSource source, ITransferDestination TransferDestination);
public class TransferAmounts : ITransferAmount
public decimal Amount { get; set; }
public void Transfer(ITransferSource source, ITransferDestination destination)
source.RemoveFunds(Amount);
destination.AddFunds(Amount);