proxy pattern no suitable methods found to override? Help i'm not sure what just went wrong

99 Views Asked by At

This is all in the form...

namespace Proxy_Pattern { public partial class Form1 : Form { public Form1() { InitializeComponent(); } double bankAmount = 1000.00;

    private void btnCheck_Click(object sender, EventArgs e)
    {
        double amount;
        amount = double.Parse(txtAmount.Text);

        CheckProxy cp =new CheckProxy();
        cp.CheckTransactionRequest(amount);
        lbltotal.Text = bankAmount.ToString();
    }

    private void btnCreditCard_Click(object sender, EventArgs e)
    {

    }
}


abstract class BankSubject
{

    public abstract void CreditTransactionRequest(double amount);
    public abstract void CheckTransactionRequest(double amount);
}

class RealBankSubject : BankSubject
{
    double bank;
    public RealBankSubject(double m_bacc)

    {
        bank = m_bacc;
    }

    public override void CreditTransactionRequest(double num)
    {
        bank -= num;
    }

    public override void CheckTransactionRequest(double num)
    {
        bank += num;
    }
}

Does not implement inherited abstract members.... but why? class CreditCardProxy : BankSubject { RealBankSubject realSubject; double amount;

    public CreditCardProxy (double m_bacc) 

    {
        amount = m_bacc ;
    }

no suitable method to override?... how is this an error? I have a method right here?

    public override void CreditTransactionRequest()
    {


         if (realSubject == null)
        {
            realSubject = new RealBankSubject(amount);
        }

        realSubject.CreditTransactionRequest(amount);
    }

    public override void CheckTransactionRequest()
    {

    }
}


class CheckProxy : BankSubject
{
    RealBankSubject realSubject;
    double amount;

    public override void CreditTransactionRequest()
    { 

    }

    public override void CheckTransactionRequest()
    {

       if (realSubject == null)
        {
            realSubject = new RealBankSubject(amount);
        }

        realSubject.CheckTransactionRequest(amount);
    }
}

}

2

There are 2 best solutions below

0
On

CreditTransactionRequest in CreditCardProxy does not take any arguments but CreditTransactionRequest in BankSubject does. This is why you can not override the method the signatures do not match.

0
On

In your proxy, you are not specifying the amount as a parameter to the method:

public override void CreditTransactionRequest();

So it cannot override

public abstract void CreditTransactionRequest(double amount);

as the method signature doesn't not match