AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vererbung

Ein Thema von mumu · begonnen am 12. Okt 2007 · letzter Beitrag vom 22. Okt 2007
Antwort Antwort
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#1

Vererbung

  Alt 12. Okt 2007, 07:24
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Vererbung

  Alt 12. Okt 2007, 09:22
Setze nicht die ganze Klasse abstrakt sondern nur die beiden Methoden.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#3

Re: Vererbung

  Alt 12. Okt 2007, 09:29
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#4

Re: Vererbung

  Alt 22. Okt 2007, 17:00
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
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#5

Re: Vererbung

  Alt 22. Okt 2007, 17:09
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Vererbung

  Alt 22. Okt 2007, 17:16
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 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