2

これはすべてフォームにあります...

名前空間 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;
    }
}

継承された抽象メンバーを実装していません....しかし、なぜですか? class CreditCardProxy : BankSubject { RealBankSubject realSubject; 倍額;

    public CreditCardProxy (double m_bacc) 

    {
        amount = m_bacc ;
    }

オーバーライドする適切な方法はありませんか?...これはどのようにエラーになりますか? ここに方法がありますか?

    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);
    }
}

}

4

2 に答える 2

0

プロキシでは、メソッドのパラメータとして金額を指定していません。

public override void CreditTransactionRequest();

したがって、オーバーライドできません

public abstract void CreditTransactionRequest(double amount);

メソッドシグネチャが一致しないため

于 2012-10-23T18:31:25.440 に答える
0

CreditTransactionRequestinCreditCardProxyは引数を取りませんが、CreditTransactionRequestinは引数を取りませんBankSubject。これが、署名が一致しないメソッドをオーバーライドできない理由です。

于 2012-10-23T18:30:23.043 に答える