AGB  ·  Datenschutz  ·  Impressum  







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

Sinn oder Unsinn von Class Helper

Ein Thema von WoGe · begonnen am 4. Jan 2010 · letzter Beitrag vom 31. Mai 2016
Antwort Antwort
Seite 1 von 2  1 2      
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#1

Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 09:40
Hallo
nachdem ich jetzt mein schönes? neues Delphi2010 habe, habe ich ich auch Zugang zu (für mich) neuen Konzepten wie Class Helper.
Erst hab ich gedacht: Klasse das hast Du schon immer gebraucht. Leider habe ich zwischenzeitlich entdeckt was man alles nicht darf:

Keine neuen Felder
Kein Zugriff auf Private Variablen
Kein überladen von Konstruktoren

Dadurch entzieht sich mir der Sinn (oder Unsinn) des ganzen Konzeptes.
Könnt Ihr mir bitte sagen für was Class Helper gut sind und vielleicht auch ein wirklich praktischen Beispiel für den Einsatz geben? Kein theoretisches bitte - das habe ich durchaus verstanden - mir ist nur bisher kein praktisches eingefallen.

Gruss
wo
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 09:45
Wenn ich mich recht entsinne lassen sich Class Helper auch für sealed/final Klassen einsetzen und fügen so neue Methoden zur Klasse hinzu, ohne mit der bisherigen Funktionalität zu interferieren. Auch für sonstige Klassen, an denen Du nichts drehen kannst, aber da ein paar Methoden noch logisch zu gehören, könnten die von nutzen sein.
Allerdings bot sich mir persönlich leider noch keine Gelegenheit die in echt zu probieren, daher auch nur Vermutungen an dieser Stelle...

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 09:52
Ja, genau dann, wenn Du an der Original-Klasse nichts ändern kannst und auch keine Ableitung erstellen willst, können Class-Helper helfen. Und oftmals geht es bei den Anwendungsfällen für Class-Helper auch nicht punktuell um Klassen, die allein für sich im Raum stehen und damit (im Allgemeinen) wunderbar ableitbar wären, sondern vielleicht um Klassen, die wiederum auch von anderen anderen Klassen genutzt werden und damit eine Ableitung nicht unmittelbar weiterhelfen würde.

Ich selbst habe die Class-Helper zum Beispiel genutzt, um die Edit-Controls eines TStringGrids an meine Bedürfnisse anzupassen:

Delphi-Quellcode:
IPEHelper = class helper for TInplaceEdit
public
  procedure UpdateAlignment( AAlignment : TAlignment );
  procedure SetFontName( const aName : string );
  procedure SetFontColor( const aColor : TColor );
  procedure SetFontSize( const aSize : integer );
end;
Auf diese Weise habe ich mir einem Zugang zu Feldern geschaffen, die ich eigentlich nicht hätte ansprechen können.

Hier ein Blog-Eintrag, der einer TStringList mittels Class-Helper ein Rückwärts-Enumerator hinzufügt:
http://17slon.com/blogs/gabr/2007/03...t-5-class.html
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 10:00
Speziell wenn die Klasseninstanz nicht von dir erzeugt wurde (und man deßhalb nichts daran ändern kann),
dann kann man damit dennoch sehr schön neue Funktionalitäten sozusagen nachträglich hinzufügen.

praktisch so wie z.B. dort
http://www.delphipraxis.net/internal...050126#1050126
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 11:33
Class helper sind imo der halbgare Versuch, extension methods aus C# nachzubauen.
Sie werden afaik in Verbindung mit dem Gesture Manager in der VCL benutzt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 12:07
Erst mal vielen Dank für die Antworten.

Ich habe mal den Versuch unternommen Speicherplatz für Instanzen bereit zustellen:
(noch sehr rudimentär und seeehhr unschön)

Delphi-Quellcode:
type
  rIchMerkMirwas = Record
    IntMerken : integer;
  End;

  TmyMemo = class helper for TCustomMemo
     private
     function GetMerken: integer;
     procedure SetMerken(const Value: integer);
     public
     procedure Init;
     published
     property Merken : integer read GetMerken write SetMerken;
  end;
...
var
  myMerkArray : array [0..10] of rIchMerkMirwas;
...

{ TmyMemo }

function TmyMemo.GetMerken: integer;
begin
  result := myMerkArray[Tag].IntMerken;
end;

procedure TmyMemo.Init;
begin

end;

procedure TmyMemo.SetMerken(const Value: integer);
begin
  myMerkArray[Tag].IntMerken := value;
end;
Das ist natürlich erst mal nur eine Machbarkeitsstudie
und das Vorhalten der Daten in einem Globalen-Array ist ja nun nicht wircklich Objektbezogen.

Gibt es eine Möglichkeit das Init direkt und automatisch nach dem Create der Original-Klasse aufzurufen? Da könnte man dann ja viel einfacher eine Verwaltungsstruktur für die Daten implementieren.

Gruss wo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 12:14
Zitat:
Gibt es eine Möglichkeit das Init direkt ....
nein,

da die Klasse von dem Helper nichts weiß, ist sowas unmöglich.
nur der Helper kennt seine Klasse und kann diese "steuern" (erweitern paßt irgendwie nicht so ganz)


PS: es gibt theoretisch auch nette Record Helper ... und schon hat man Quasi sowas wie Vererbung bei den Records

irgendwelche Standard-Records mit neuen Befehlen und Properties auszustatten wär schon ganz witzig,
oder meint ihr nicht?

Delphi-Quellcode:
type
  TInt64Helper = record helper for TGUID
    function toStr: String;
    Procedure fromStr(const S: String);
  end;

var G: TGUID;

begin
  WtiteLn(G.toStr);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 12:51
Zitat von Stevie:
Class helper sind imo der halbgare Versuch, extension methods aus C# nachzubauen.
Nachbauen? Wie soll denn das bitte schön gehen, wenn Class Helpers vor den Extension Methods "erfunden" wurden?
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 13:04
Also man kann die Class Helper austricksen:
Typed Constants gehen nämlich:

Delphi-Quellcode:
function TmyMemo.GetMerken2: integer;
var aPointer : prIchMerkMirwas;
begin
  aPointer := myWertePointer;
  result := aPointer^.IntMerken;
end;

function TmyMemo.myWertePointer: pointer;
const
  myPointer: pointer = nil;
var
  aPointer: pointer;
begin
  aPointer := myPointer;
  if not assigned(aPointer) then
  begin
    aPointer := new(prIchMerkMirwas);
    myPointer := aPointer;
  end;

  result := aPointer;
end;

procedure TmyMemo.SetMerken2(const Value: integer);
var aPointer : prIchMerkMirwas;
begin
  aPointer := myWertePointer;
  aPointer^.IntMerken := Value;
end;
Wie könnte man das Memory-Leak vermeiden?

Aber trotzdem ist das Thema (vorerst) für mich mal erledigt.
Vielen Dank noch mal an Alle

Gruss
wo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Sinn oder Unsinn von Class Helper

  Alt 4. Jan 2010, 13:29
Wo wird da der ClassHelper ausgetrickst?

typisierte Konstanten sind "schreibgeschützte" globale Variablen


Delphi-Quellcode:
function TmyMemo.myWertePointer: pointer;
const
  myPointer: pointer = nil;
entspricht
Delphi-Quellcode:
var
  myPointer: pointer = nil;
function TmyMemo.myWertePointer: pointer;
wobei das mit den ClassHelpern nichts zu tun hat.

Es gibt da auch einen Compilerschalter (hab nur vergessen welchen, aber der steht eh in der OH), welcher diese Konstanten quasi zu Variablen macht, denen man "offiziell" auch was zuweisen kann.

Und wer absichtlich an der Speicherverwaltugng rumtrickst, der muß auch mit Löchern rechnen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:03 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