Laden...

[gelöst] Detailfrage zur Vererbung: Überschriebene [überdeckte] Submethode wird nicht ausgeführt

Erstellt von Bundy.NET vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.755 Views
Thema geschlossen
B
Bundy.NET Themenstarter:in
76 Beiträge seit 2007
vor 9 Jahren
[gelöst] Detailfrage zur Vererbung: Überschriebene [überdeckte] Submethode wird nicht ausgeführt

Hi!

Ich habe eine Detailfrage zum Thema Vererbung und konnte keine Antwort darauf finden. Folgendes, vereinfachte Szenario besteht:

Klasse A ist abstrakt und beinhaltet 2 Methoden mit Namen A1 und A2;
Methode A1 ruft u.a. Methode A2 auf.

Klasse B erbt von Klasse A.
Methode A2 wird überschrieben. Zur besseren Unterscheidbarkeit nenne ich diese Methode B2 in meinem weiteren Text (im Quellcode natürlich gleicher Name!). A1 wird nicht überschrieben.

Wenn ich jetzt ein Objekt der Klasse B erstelle und die Methode A1 aufrufe, wird nicht die Methode B2, sondern A2 benutzt. Es wäre aber schön, wenn es so wäre, da es mir Arbeit ersparen würde. In Methode A1 werden nämlich allgemeine Berechnungen durchgeführt. Wenn sich da was ändern, müsste ich das auf jeden Fall bei allen Unterklassen ändern. Daher auch die Vererbung, um den Aufwand gering zu halten.

Kann man das gewünschte Verhalten erzwingen oder gibt es da eine Alternative? Denke vielleicht komplett in die falsche Richtung?

"Fehler sind das Tor zu neuen Entdeckungen"

709 Beiträge seit 2008
vor 9 Jahren

Hallo Bundy.NET,
ist die Methode A2 als virtual gekennzeichnet?

pinki

B
Bundy.NET Themenstarter:in
76 Beiträge seit 2007
vor 9 Jahren

Ja. Hier mal der stark vereinfachte Quellcode. Habs mal auf das Problem runtergebrochen.



public abstract class A {

  public virtual List<String> A1 ()
  {
     String a = this.A2();
     return liste;
  }

  protected virtual String A2 () 
  { 
     return null; 
  }

}

public class B : A
{
  protected new String A2() 
  { 
    return "Wert mit Sinngehalt";
  }
}


"Fehler sind das Tor zu neuen Entdeckungen"

W
955 Beiträge seit 2010
vor 9 Jahren

Hallo, beschäftige Dich mal mit new und override-keywords

2.080 Beiträge seit 2012
vor 9 Jahren

new überschreibt nicht, es definiert neu. Daher kommt auch die Bezeichnung.
Die Methode wird nur aufgerufen, wenn das Objekt den genauen Typ hat, in dem die Methode definiert wurde.

override ist das, was du suchst, das tut nämlich genau das, was du willst.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

B
Bundy.NET Themenstarter:in
76 Beiträge seit 2007
vor 9 Jahren

Vielen Dank Euch dreien!

Mit "override" hat es (wie Palladin007 schon meinte) geklappt.

"Fehler sind das Tor zu neuen Entdeckungen"

Hinweis von herbivore vor 9 Jahren

Der Unterschied zwischen override und new gehört zu den Grundlagen, die wir als bekannt voraussetzen. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 (und 1.1).

Thema geschlossen