Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Vererbung (https://www.delphipraxis.net/101378-vererbung.html)

mumu 12. Okt 2007 06:24


Vererbung
 
ich habe folgende klasse:

Code:
public abstract Class1
{
  public abstract int Test();
  public abstract int Test2();

  private int DoSomething()
  {
    Test();
    Test2();
    ...
  }

  public static int DoSomething()
  {
    Class1 cl = new Class1();
    cl.DoSomething();
    cl.Test();
  }
}
Sie ist abstract definiert, weil ich die zwei Methoden Test und Test2 in der abgeleiten Klasse implementieren möchte... Zudem haben ich private Funktionen, die auf die abstracten Methoden zugreifen und static Methoden. Wobei die static Methode zunächst eine Instanz dieser Klasse erzeugen soll und diese dann aufrufen. Aber das geht ja nicht, weil die Klasse abstract ist.

Wie kann ich das am besten lösen ohne die static Methode in der abgeleiteten Klasse implementieren zu müssen??

vielen Dank

Muetze1 12. Okt 2007 08:22

Re: Vererbung
 
Setze nicht die ganze Klasse abstrakt sondern nur die beiden Methoden.

Phoenix 12. Okt 2007 08:29

Re: Vererbung
 
Das hilft insofern nicht, als dass durch die statische Methoden dann die falsche Klasse und nicht die Ableitung davon (die die abstrakten Methoden erst implementiert) instanziert wird.

Du müsstest der statischen Methode den Typen (Referenz auf die richtige Klasse) mitgeben. Diese kann dann erstmal prüfen, ob der Typ wirklich von der Klasse abgeleitet ist, wenn ja diesen Typen instanzieren und dann weitermachen. Du erzeugst also gar keine Objekt von Class1 sondern direkt von einer Ableitung davon.

mumu 22. Okt 2007 16:00

Re: Vererbung
 
jo phoenix, hört sich gut an. könntest du mir da mal ein kleines Codebeispiel geben? So wie ich es im ersten Post gemacht hab...

vielen dank

Phoenix 22. Okt 2007 16:09

Re: Vererbung
 
Sorry, nix passendes zur Hand ;-)
Aber such mal nach Class Factory. Das ist der entsprechende Begriff, dazu müsste es hier auch ein paar Beispiele geben.

Dax 22. Okt 2007 16:16

Re: Vererbung
 
Was noch ginge wären Generics mit new()-Constraint:

Code:
public abstract Class1
{
  public abstract int Test();
  public abstract int Test2();

  private int DoSomething()
  {
    Test();
    Test2();
    ...
  }

  public static int DoSomething<T>() where T: Class1, new()
  {
    T cl = new T();
    cl.DoSomething();
    cl.Test();
  }
}
Beispiel:
Code:
Class1.DoSomething<Class2>();
In diesem Falle braucht deine Klasse allerdings einen öffentlichen, parameterlosen Konstruktor. Falls dir das nicht zusagt, und Phoes Vorschlag ebenso wenig dein Metier ist, könntest du die Instanzen der Klassen noch per Reflection erstellen... Aber das ist nicht grade sauber ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz