using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
IAccountWithTransfer accountObject1 = new ZhaoShangAccount();
IAccount accountObject2 = new NongYeAccount();
IAccountWithTransfer accountObject3 = new ZhaoShangAccount();
accountObject1.PayIn(1000);
accountObject2.PayIn(1000);
accountObject3.PayIn(1000);
accountObject1.Transfer(accountObject2, 200);
accountObject1.Transfer(accountObject3, 200);
accountObject3.Transfer(accountObject2, 500);
Console.WriteLine(accountObject1.RemainMoney);
Console.WriteLine(accountObject2.RemainMoney);
Console.WriteLine(accountObject3.RemainMoney);
Console.ReadKey();
}
}
interface IAccount
{
void PayIn(decimal payMoney);
void WithDraw(decimal drawMoney);
decimal RemainMoney
{
get;
}
}
interface IAccountWithTransfer : IAccount
{
void Transfer(IAccount targetAccount, decimal transferMoney);
}
/// <summary>
/// 允¨º许¨ª转Áa帐¨º的Ì?银°?行D对?象¨®
/// </summary>
class ZhaoShangAccount :NongYeAccount, IAccountWithTransfer
{
/// <summary>
/// 转Áa帐¨º
/// </summary>
/// <param name="targetAccount">目?标À¨º帐¨º户¡ì</param>
/// <param name="transferMoney">金e额?</param>
public void Transfer(IAccount targetAccount, decimal transferMoney)
{
if (RemainMoney < transferMoney)
{
Console.WriteLine("Fail to draw your money!");
}
else
{
WithDraw(transferMoney);
targetAccount.PayIn(transferMoney);
}
}
}
/// <summary>
/// 不?允¨º许¨ª转Áa帐¨º的Ì?银°?行D对?象¨®
/// </summary>
class NongYeAccount : IAccount
{
/// <summary>
/// 剩º¡ê余®¨¤金e额?
/// </summary>
public decimal RemainMoney { get; private set; }
/// <summary>
/// 出?帐¨º
/// </summary>
/// <param name="payMoney">金e额?</param>
public void PayIn(decimal payMoney)
{
RemainMoney += payMoney;
}
/// <summary>
/// 进?账?
/// </summary>
/// <param name="drawMoney">金e额?</param>
public void WithDraw(decimal drawMoney)
{
if (RemainMoney < drawMoney)
{
Console.WriteLine("Fail to draw your money!");
}
else
{
RemainMoney -= drawMoney;
}
}
}
}