![]() |
Vererbung
ich habe folgende klasse:
Code:
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.
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(); } } Wie kann ich das am besten lösen ohne die static Methode in der abgeleiteten Klasse implementieren zu müssen?? vielen Dank |
Re: Vererbung
Setze nicht die ganze Klasse abstrakt sondern nur die beiden Methoden.
|
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. |
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 |
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. |
Re: Vererbung
Was noch ginge wären Generics mit new()-Constraint:
Code:
Beispiel:
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(); } }
Code:
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 ;)
Class1.DoSomething<Class2>();
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz