1

このプログラムには小さな問題があります。このプログラムは、ポリモーフィズムを使用するように設計されています。1 つの基本クラスと 2 つの派生クラスを作成しました。

基本クラス (銀行口座) 配列を作成し、それを 3 つの銀行口座オブジェクトで埋めることになっています。次に、オーバーロードされたコンストラクターを使用して、各銀行口座オブジェクトに新しいオブジェクトを割り当てます。

 public partial class Form1 : Form
    {
     //Base class array
     BankAcct[] b = new BankAcct[3];



    public Form1()
    {
        InitializeComponent();

        //This is not getting current values from form!
        int accountNum;
        int atmNum;
        int pinNum;

        an = Convert.ToInt32(accountNumber.Text);
        p = Convert.ToInt32(pin.Text);
        atm = an - p;

        //base class
        b[0] = new BankAcct(name.Text, 500.00M, accountNum);

        //this derived class inherits from bankAcct name, account number, and 
        //the decimal which is the balance assigned to the Account
        //private variables are atm and pin in this class
        b[1]= new SilverBankAcct(name.Text, an, 1500.00M, atmNumber, pinNum);

        //this derived class inherits from SilverBankAcct atm, pin,
        //has one private variable the decimal at the end which is the interest
        b[2] = new GoldBankAcct(name.Text, accountNum, 25000.00M, atm, pinNum, 0.05M);

    }

私の問題は、Form1 コンストラクターでオブジェクトをインスタンス化すると、フィールドがフォームから更新されず、それらのフィールドの現在の値が無視されることです。基本クラスのプロパティにアクセスし、そこにあるフォームから値を割り当てることで情報を割り当てようとしましたが、SilverBankAcct クラスと GoldBankAcct クラスに入るプライベート変数である atm 番号とピン番号を更新しようとすると問題が発生します。 .

private void button1_Click(object sender, EventArgs e)
    {


        b[0].fName = name.Text;
        b[1].fName = name.Text;
        b[2].fName = name.Text;
        //do the same for account number which works, but how am I supposed to update atm and pin from the form when I have no access to these variables I only have access to the base class?
     }

ボタンがクリックされたときに、渡される値がフォームからの現在の値に更新されるようにするためのより良い方法は何でしょうか?

4

1 に答える 1

1

次のように書くことができます。

private void assignPinNumber(BankAcct account, int newPinNumber)
{
   SilverBankAcct silver = account as SilverBankAcct;
   if(silver != null)
      silver.pinNumber = newPinNumber;
}
于 2013-07-17T04:01:50.467 に答える