Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 16:23
Das hat doch nichts damit zu tun was er will oder braucht
Womit denn sonst?
Er WILL das vllt. nicht. Aber prinzipiell ist der Sinn einer Ableitung eine bestehende Klasse zu ERWEITERN. Das ist aber aus folgenden Gründen NICHT möglich:

Zitat:
Du kannst keine Methoden überschreiben, du weißt nicht welche Methoden/Properties/Variablen dir zur Verfügung stehen.. Du weißt gar nichts. Wie willst du denn auf dieser Grundlage eine Klasse ableiten/implementieren?
D.h. es wird voraussichtlich niemals einen Compiler geben, der sowas zulässt.
Es macht keinen Unterschied ob er es will/braucht, wenn es einfach nicht geht.

Der Ansatz an sich macht (OOP-technisch) keinen Sinn.
Sinnvoll ist der Ansatz schon, ob's jetzt OOP oder sonstwas für ein Paradigma ist. Statt z.B. eine TThreadedObject<TStringList> zu nutzen könnte man natürlich auch eine TThreadedStringList = class(TStringList) schreiben. Deren Implementation wäre aber bis auf den Namen der Basisklasse identisch mit TThreadedBlubb, TThreadedBlah und TThreadedSchlock. Das schreit doch nach Generics.
Die Grundidee ist gut. Der Ansatz das auf diese Weise mit Generics zu lösen ist schlecht, nicht machbar und OOP-technischer Schwachsinn.

Sowas wie TThreadedObject<TStringList> ist ja durchaus machbar und gut!

TThreadedBlubb, TThreadedBlah und TThreadedSchlock wäre natürlich noch ein Stück schöner, aber das schreit absolut nicht nach Generics. Für sowas sind und waren Generics nicht gedacht und es ist letztendlich einfach nicht machbar.

Für sowas sind Class-Helper gedacht.
Die waren dafür gedacht, dass man Delphis TObject in .net reinhämmern kann, sonst für nix. Und im konkreten Fall bringen sie AFAIK eh nix, weil der OP ja Felder zur Basisklasse hinzufügen will.
Aha..
Class-Helper gehen natürlich nur wenn er keine Felder hinzufügen muss. Die Dinger sind aber in manchen Situationen durchaus nützlich.

Wenns für ihn mit Class-Helpern nicht geht, dann bleibt ihm nur die TThreadedObject<TStringList> Variante oder er muss von jeder Klasse in der er Critical-Sections einbauen will ableiten.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat