2013-04-30 10 views
6

Mam metodę w mojej baseclass, która zwraca bool i chcę, aby ten bool określić, co dzieje się z tą samą nadpisaną metodę w mojej klasy pochodnej.Stosowanie wartości zwracanej przez metodę baseclass?

Podstawa:

public bool Debt(double bal) 
    { 
     double deb = 0; 
     bool worked; 

     if (deb > bal) 
     { 
      Console.WriteLine("Debit amount exceeds the account balance – withdraw cancelled"); 
      worked = false; 
     } 
     else 

     bal = bal - deb; 
     worked = true; 

     return worked; 
    } 

Pochodzące

public override void Debt(double bal) 
    { 
     // if worked is true do something 

    } 

Zauważ, że bal pochodzi od konstruktora zrobiłem wcześniej

+1

Upewnij się, że metoda klasy bazowej jest wirtualny: 'public virtual bool Deb (podwójne bal)' lub klasa pochodzi po prostu ukryć. Tylko notatkę boczną. –

+4

Również typ wartości zwracanej musi być zgodny, w przeciwnym razie pojawi się błąd kompilatora, '' .Derived.Debt (double)': typem powrotu musi być 'bool', aby dopasować przesłonięty element ' .Base.Debt (double) ". –

Odpowiedz

10

można wywołać metodę klasy bazowej za pomocą base kluczowe:

public override void Debt(double bal) 
{ 
    if(base.Debt(bal)) 
     DoSomething(); 

} 

Jak wskazano w powyższych komentarzach, należy upewnić się, że istnieje wirtualna metoda z tym samym podpisem (typ i parametry zwracane) w klasie bazowej lub usunąć słowo kluczowe "override" z klasy pochodnej.

+1

Może najlepiej jest zamieniać obszar po 'if' i robić tam twoje rzeczy zamiast wywoływania innej metody, aby to zrobić. Po co sprawić, by stos rozmów był głębszy, niż ma być? – Jeff

+0

@Jeff - Stawiam tam wywołanie metody, aby wskazać, że coś powinno się tam zdarzyć. Równie dobrze mogą to być instrukcje inline. – PHeiberg

+0

Widzę, do czego zmierzasz, ale nie ma możliwości sprawdzenia, czy wynik jest prawdziwy czy fałszywy. – TheAce

2
if(base.Debt(bal)){ 
    // do A 
}else{ 
    // do B 
} 

base odnosi się do klasy bazowej. Tak więc base.X odnosi się do X w klasie bazowej.

2

wywołać metodę base:

public override void Debt(double bal) 
{ 
    var worked = base.Debt(bal); 
    //Do your stuff 
} 
1

Ponieważ kilka wspominają inni można użyć base.Debt(bal) zadzwonić do swojej metody klasy bazowej. Zauważyłem również, że twoja metoda klasy podstawowej nie została zadeklarowana jako wirtualna. Metody C# NIE są domyślnie wirtualne, więc nie zostaną nadpisane w klasie pochodnej, chyba że określono ją jako wirtualną w klasie bazowej.

//Base Class 
class Foo 
{ 
    public virtual bool DoSomething() 
    { 
     return true; 
    } 
} 

// Derived Class 
class Bar : Foo 
{ 
    public override bool DoSomething() 
    { 
     if (base.DoSomething()) 
     { 
      // base.DoSomething() returned true 
     } 
     else 
     { 
      // base.DoSomething() returned false 
     } 
    } 
} 

Here's MSDN co ma do powiedzenia na temat metod wirtualnych

Powiązane problemy