Laden...

Überladene Methode soll automatisch BasisMethode aufrufen

Erstellt von Lordrol vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.864 Views
L
Lordrol Themenstarter:in
9 Beiträge seit 2008
vor 15 Jahren
Überladene Methode soll automatisch BasisMethode aufrufen

Hallo,

ich hoffe ich bin hier im richtigen Forum. Nach durchsuchen des Forums habe ich nichts passendes zu meinem Problem gefunden.

Nun zu meinem Problem:

Ich habe eine Klasse von der ich eine andere ableite, in der Basisklasse habe ich eine Methode, welche mir eine MessageBox ausgibt.

In der abgeleiteten Klasse habe ich die Methode überladen und gebe auch eine MessageBox aus, jedoch mit einem anderen Text.

Nun weiß ich nicht, wie ich automatisch die Methode aus der Basisklasse aufrufen kann. Ich will das nicht machen, wie beim Konstruktor, das ich ": base" hinterschreibe, sondern das es automatisch passiert.
Interessant wäre das dann auch, wenn ich das beim Konstruktor nicht machen bräuchte.

Falls das nicht gehen sollte, müsste ich das, denke ich, über eine zweite Methode
laufen lassen.

  public class FooClass
  {
    public FooClass()
    {
    }
    
    public void TestMethod()
    {
      MessageBox.Show("FooClass");
    }
  }

  
  public class DummyClass : FooClass 
  {
    public FooClass() : base()
    {
    }
   
    public void TestMethod()
    {
      MessageBox.Show("DummyClass");
    }
  }

Danke schonmal
Lordrol

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Lordrol,

In der abgeleiteten Klasse habe ich die Methode überladen

du meinst überschrieben. Dazu musst du aber die Methode in der Oberklasse als virtual und in der Unterklasse als override kennzeichnen.

Nun weiß ich nicht, wie ich automatisch die Methode aus der Basisklasse aufrufen kann.

Auotmatisch geht das nicht. Du musst das explizit mit base.TestMethod () machen.

herbivore

L
Lordrol Themenstarter:in
9 Beiträge seit 2008
vor 15 Jahren

Kann man den beim Konstruktor zwingen, das die Basisklasse aufgerufen wird?
Also das eine Meldung ausgegeben wird, wenn es nicht passiert?

Danke
Lordrol

5.942 Beiträge seit 2005
vor 15 Jahren

Hallo Lordrol

Hört sich an, als wäre für dich das Decorator Entwurfsmuster mal einen Blick wer 🙂

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Lordrol,

Kann man den beim Konstruktor zwingen, das die Basisklasse aufgerufen wird?

eher andersherum. Der Konstruktor der Baisisklasse wird immer automatisch aufgerufen; man kann das nicht verhindern.

Ich verstehe den Hintergrund deiner Fragen nicht. Was willst du denn eigentlich erreichen?

herbivore

L
Lordrol Themenstarter:in
9 Beiträge seit 2008
vor 15 Jahren

Hallo herbivore,

Ich verstehe den Hintergrund deiner Fragen nicht. Was willst du denn eigentlich erreichen?

Ich will erreichen, das die Funktionalität die ich in der Basisklassen-Methode habe, auch ausgeführt wird, wenn ich in einer abgeleiteten Klasse die Methode überschreibe, ohne das ich extra base.Methode aufrufen muss.

Gruß
Lordrol

L
Lordrol Themenstarter:in
9 Beiträge seit 2008
vor 15 Jahren

Hallo,

für mein Problem mit dem Konstruktor habe ich eine Lösung gefunden.
Da ich immer einen Parameter mit übergeben will, mache ich meinen Parameterlosen Konstruktor in der Basisklasse privat. Dadurch meckert der Compiler an, das es keinen Konstruktor mit 0-Parametern gibt.

Für mein anderes Problem, muss ich halt eine extra Methode verwenden.

Danke
Lordrol

D
462 Beiträge seit 2005
vor 15 Jahren

Hallo!

Du könntest die eigentliche Methode aus der Basis-Klasse implementieren und eine zusätzliche (protected) Methode anbieten, die überschrieben werden kann. Und diese rufst du halt dann aus der eigentlichen Methode auf.

  public class FooClass
  {
    public FooClass()
    {
    }

    public void TestMethod()
    {
      MessageBox.Show("FooClass");
      InternalTestMethod();
    }
    virtual protected void InternalTestMethod() {};
  }


  public class DummyClass : FooClass
  {
    public FooClass() : base()
    {
    }

    override protected void InternalTestMethod()
    {
      MessageBox.Show("DummyClass");
    }
  }

lg

L
Lordrol Themenstarter:in
9 Beiträge seit 2008
vor 15 Jahren

Hallo DeveloperX,

genau so hatte ich mir das gedacht!

Danke