class Contract
{
public List<PaymentAttempt> PaymentAttempts { get; }
}
abstract class PaymentAttempt // uses tpc
{
public abstract bool HasPaid(int amount);
}
class BankPaymentAttempt : PaymentAttempt
{
public string BankAccount { get; set; }
public int AmountPaid { get; set; }
public bool HasPaid(int amount) => AmountPaid >= amount;
}
class VipUserPaymentAttempt : PaymentAttempt
{
public bool IsSuperVip { get; set; }
public bool HasPaid(int amount) => IsSuperVip;
}
class Contract
{
public List<PaymentAttempt> PaymentAttempts { get; }
}
abstract class PaymentAttempt // uses tpc
{
public abstract bool HasPaid(int amount);
}
class BankPaymentAttempt : PaymentAttempt
{
public string BankAccount { get; set; }
public int AmountPaid { get; set; }
public bool HasPaid(int amount) => AmountPaid >= amount;
}
class VipUserPaymentAttempt : PaymentAttempt
{
public bool IsSuperVip { get; set; }
public bool HasPaid(int amount) => IsSuperVip;
}