AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

"Namespace" innerhalb einer Klasse

Ein Thema von s.h.a.r.k · begonnen am 3. Dez 2010 · letzter Beitrag vom 4. Dez 2010
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:05
@shmia: Genau das wollte ich ja hier vermeiden Finde es etwas direkter, wenn ich Object.MachWas() aufrufe, als Controller.MachWasMit(Object) . Mir ist schon klar, dass das Geschmackssache ist, aber alles muss gehen
Deine gesuchte Lösung geht in Richtung "Vererbung"; wobei du nicht wirklich ableiten möchtest, sondern mit einem Class-Helper Funktionalität hinzufügen möchtest.
Eigentlich braucht du sogar eine Mehrfachvererbung, da du nicht nur die Methode Animate haben willst,
sondern auch noch ein (privates) Feld in dem der Animator steckt.
Ein Class-Helper ist dazu aber grundsätzlich nicht in der Lage, weil sich dadurch das Objekt um 4 Bytes verlängern müsste.
Delphi müsste schon das Konzept von partiellen Klassen beherschen um das umzusetzen, was Dir vorschwebt.

Ich kann dir nur sagen, dass du mit Vererbung hier nicht weiterkommst.
Richtig wäre "Komposition"; also so wie ich das oben gezeigt habe.
Es ist auch weniger eine Geschmacksfrage, ob man lieber Vererbung oder eher Komposition verwendet, sondern die Komposition hat handfeste Vorteile:
http://www.cleancodedeveloper.de/Rot...ritance_FCoI_3
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:09
Hm, magst zwar irgendwie recht haben, aber ich sträube mich noch etwas gegen den Gedanken So wie ich das haben will, ists halt irgendwie schöner imho (wobei Schönheit halt immer relativ ist, ich weiß)

Wenn ich meine Komponente allerdings für frühere Delphi-Versionen veröffentlichen will, dann muss ich wohl oder übel auf diese class helper verzichten... Daher wird es wohl darauf hinauslaufen eben die Komposition zu verwenden, schade drum!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.877 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:17
Du könntest auch den Originaltyp überdecken
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.355 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:29
Hier ging es auch um die class helper.

Du kannst dort alles machen, wie in einer Funktion, der Du das Objekt übergibst. Diese Funktion wird allerdings an das Objekt "angepappt" und hat Zugriff auf dieses als "Self".
Überschreiben von Methoden ist nicht möglich.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:32
Du kannst dort alles machen, wie in einer Funktion, der Du das Objekt übergibst. Diese Funktion wird allerdings an das Objekt "angepappt" und hat Zugriff auf dieses als "Self".
Überschreiben von Methoden ist nicht möglich.
Tja, aber genau das überschreiben kann ja evtl. zu einem Problem werden! Daher ja auch die Frage nach dem Namespace. Werde es aber wohl so machen, wie shmia gemeint hat.

@mkinzler: Du meinst Vererbung? Das will ich nicht, da mein Animator allgemeingültig sein soll und alle Integer/Extended-Properties animieren können soll -- auch wenn ein User z.B. die "Tag"-Property angibt, der Animator machts
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.386 Beiträge
 
Delphi 12 Athens
 
#6

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 19:46
Delphi-Quellcode:
unit Unit9;

interface

uses
  SysConst, SysUtils;

type
  TAnimator = class
  private
    FAllowFree: Boolean;
    class var FSingleton: TAnimator;
  public
    procedure BeforeDestruction; Override;

    procedure Animate();
    procedure Stop();
  end;

  TObjectAnimator = class helper for TObject
  public
    function Animate: TAnimator;
  end;

implementation

procedure TAnimator.BeforeDestruction;
begin
  if not FAllowFree then
    raise EAccessViolation.Create(SAccessViolationNoArg);
end;

function TObjectAnimator.Animate: TAnimator;
begin
  Result := TAnimator.FSingleton;
end;

...

initialization
  TAnimator.FSingleton := TAnimator.Create;

finalization
  TAnimator.FSingleton.FAllowFree := True;
  FreeAndNil(TAnimator.FSingleton);

end.
Du könntest natürlich auch einen indirekten Namespace einführen, in Form von einem Namesprefix, welchen du allen deinen Methoden/Property vorstellst.
Delphi-Quellcode:
type
  TObjectAnimator = class helper for TObject
  public
    procedure AnimateAnimate();
    procedure AnimateStop();
  end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 20:40
Genau die Ideen hatte ich ja schon selbst und will eben genau dies vermeiden. Ich muss mal schauen, wie das bzgl. dem "Überladen" bei class helper aussieht, d.h. wenn schon eine Methode vorhanden ist und die gleiche -- also mit gleichem Namen -- via class helper dazu kommt. Das kann ich ja dann mal berichten. Die IDE meldet gerade einen dummen internen Fehler und ich weiß nicht woher der auf einmal kommt... *grml*
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:23 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