2012-04-18 28 views
2

私は抽象クラスを扱うC#で私の宿題をやっています。抽象メンバを呼び出すことができません

public abstract class Account 
{ 
    public abstract bool Credit(double amount); 
    public abstract bool Debit(double amount); 
} 

public class SavingAccount : Account 
{ 
    public override bool Credit(double amount) 
    { 
     bool temp = true; 
     temp = base.Credit(amount + calculateInterest()); 
     return temp; 
    } 

    public override bool Debit(double amount) 
    { 
     bool flag = true;  
     double temp = getBalance();  
     temp = temp - amount; 

     if (temp < 10000) 
     { 
      flag = false; 
     } 

     else 
     { 
      return (base.Debit(amount)); 
     } 

     return flag; 
    } 
} 

私はbase.Debit()またはbase.Credit(呼び出し)、それは私に抽象メンバーを呼び出すことはできませんのエラーが発生します。 私を助けてください。

+1

何が問題なのですか?あなたは何を達成しようとしていますか?抽象的な意味を理解していますか? –

+0

あなたは何をすると思いますか? *抽象的な*なので、何もしないので、呼び出すことはできません。 – svick

+0

Calla 'Base'の代わりにthis.Debit()'が動作するはずです:) – MarcinJuraszek

答えて

3

抽象メソッドを呼び出すことはできません。考えられるのは抽象宣言されたメソッドはそれを定義するために派生クラスを必要とするということです。 base.Debitを使用すると、抽象メソッドを呼び出すときに影響がありますが、これは実行できません。あなたのコードをもっと詳しく読んで、私はこれがあなたが望んだものだと思います。Debit()

public abstract class Account 
{ 
    protected double _balance; 

    public abstract bool Credit(double amount); 
    public abstract bool Debit(double amount); 
} 

public class SavingAccount : Account 
{ 
    public double MinimumBalance { get; set; } 

    public override bool Debit(double amount) 
    { 
    if (amount < 0) 
     return Credit(-amount); 

    double temp = _balance; 
    temp = temp - amount; 

    if (temp < MinimumBalance) 
    { 
     return false; 
    } 
    else 
    { 
     _balance = temp; 
     return true; 
    } 
    } 

    public override bool Credit(double amount) 
    { 
    if (amount < 0) 
     return Debit(-amount); 

    _balance += amount; 
    return true; 
    } 
} 
3

要約実装がないことを意味します。あなたはそれを使って、派生クラスが自分自身に提供するようにします。したがって、抽象メソッドを直接呼び出すべきではありません。私はこれを読むことをお勧めします: http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.80).aspx

関連する問題