AGB  ·  Datenschutz  ·  Impressum  







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

Delphi XE3?

Ein Thema von greenmile · begonnen am 9. Mär 2012 · letzter Beitrag vom 11. Dez 2012
Antwort Antwort
Seite 53 von 56   « Erste     343515253 5455     Letzte »    
mkinzler
(Moderator)

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

AW: Delphi XE3?

  Alt 6. Sep 2012, 09:45
Nein funktioniert leider nicht.

Delphi-Quellcode:
type
    MyStringHelper = record helper ( System.SysUtils.TStringHelper) for string
        function Test;
    end;
Zitat:
[dcc32 Fehler] Project1.dpr(7): E2029 ',' oder ':' erwartet, aber '(' gefunden
[dcc32 Fehler] Project1.dpr(7): E2029 ',' oder ')' erwartet, aber '.' gefunden
[dcc32 Fehler] Project1.dpr(7): E2029 ';' erwartet, aber 'FOR' gefunden
[dcc32 Fehler] Project1.dpr(8): E2023 Funktion benötigt Ergebnistyp
[dcc32 Fehler] Project1.dpr(59): E2003 Undeklarierter Bezeichner: 'Test'
Markus Kinzler
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

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

AW: Delphi XE3?

  Alt 6. Sep 2012, 09:48
Record-Helper lassen sich im Gegensatz zu Class-Helpern nicht ableiten.

Ich würde auch davon abraten, eine zu große und komplexe Hierarchie in den Helpern - die ja parallel zu den Business-Objekten stehen - etablieren zu wollen. Die Helper selbst sind ja nur Hilfswerkzeuge, die zwar punktuell ungemein praktisch sein können, aber kein Bestandteil des grundsätzlichen Anwendungsdesigns sein sollten.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#523

AW: Delphi XE3?

  Alt 6. Sep 2012, 09:51
Nein funktioniert leider nicht.

Delphi-Quellcode:
type
    MyStringHelper = record helper ( System.SysUtils.TStringHelper) for string
        function Test;
    end;
Zitat:
[dcc32 Fehler] Project1.dpr(7): E2029 ',' oder ':' erwartet, aber '(' gefunden
[dcc32 Fehler] Project1.dpr(7): E2029 ',' oder ')' erwartet, aber '.' gefunden
[dcc32 Fehler] Project1.dpr(7): E2029 ';' erwartet, aber 'FOR' gefunden
[dcc32 Fehler] Project1.dpr(8): E2023 Funktion benötigt Ergebnistyp
[dcc32 Fehler] Project1.dpr(59): E2003 Undeklarierter Bezeichner: 'Test'
Und wenn du anstatt MyStringHelper es TStringHelper nennst?

Die Abhängigkeit anhand der Uses-Reihenfolge habe ich für Interceptor-Geschichten immer als recht angenehm empfunden.
Warum sollten für Helper andere Regeln gelten als für z.B. für Klassen?

Wie ist das, wenn man sich eigene Typen definiert und davon abhängig eigene Helper?

Delphi-Quellcode:
type
  MyString = System.String

  MyStringHelper = record helper for MyString
    function Test;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#524

AW: Delphi XE3?

  Alt 6. Sep 2012, 09:55
Ist wohl ein ähnliches Problem wie mit der Mehrfachvererbung (welche Methode bei gleichem Namen).
Das mit einer so künstlichen Einschränkung zu umgehen ist aber irgendwie typisch

Ableiten ist ja auch keine Lösung, wenn man Helper von verschiedenen Anbietern (und damit Units), benutzen möchte.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#525

AW: Delphi XE3?

  Alt 6. Sep 2012, 09:57
Ableiten ist ja auch keine Lösung, wenn man Helper von verschiedenen Anbietern (und damit Units), benutzen möchte.
Wie oft kommt sowas vor?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Delphi XE3?

  Alt 6. Sep 2012, 10:01
Zitat:
Wie ist das, wenn man sich eigene Typen definiert und davon abhängig eigene Helper?
Dann wird nur die Funktion Test gekannt.

Zitat:
Warum sollten für Helper andere Regeln gelten als für z.B. für Klassen?
Weil es etwas anderes ist. Helper erweitern zur Laufzeit; keine echte Vererbung.

Zitat:
Ist wohl ein ähnliches Problem wie mit der Mehrfachvererbung (welche Methode bei gleichem Namen).
Es gibt gute Gründe, die gegen Mehrfachvererbung sprechen, dieser ist einer davon. Deshalb unterstützen Delphi, Java, C# usw. diese auch nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#527

AW: Delphi XE3?

  Alt 6. Sep 2012, 10:04
Ableiten ist ja auch keine Lösung, wenn man Helper von verschiedenen Anbietern (und damit Units), benutzen möchte.
Wie oft kommt sowas vor?
Kommt schon vor - auch bei eigenen Helpern. Wenn ich bei einem Helper für eine Klasse immer die Vererbungshierarchie der Helper berücksichtigen muss, erhöht das nicht gerade die Modularisierung.

Was aber geht, sind mehrere class helper für unterschiedliche Basisklassen:

Delphi-Quellcode:
type
  TObjectHelper = class helper for TObject
  public
    procedure Foo;
  end;

  TComponentHelper = class helper for TComponent
  public
    procedure Bar;
  end;


procedure TObjectHelper.Foo;
begin
end;

procedure TComponentHelper.Bar;
begin
end;

procedure TForm158.FormCreate(Sender: TObject);
begin
  Foo;
  Bar;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi XE3?

  Alt 6. Sep 2012, 11:52
Oh, hatte gedacht/gehofft, daß man mehrere Helper erstellen kann. (hab's bisher aber zufällig noch nie benutzt)

Gut, ein Problem ist die Vererbungsgeschichte, also vorrangig das Problem "Was passiert, wenn in 2 Helpern die selbe Methode (Methoden-Name) vorkommt".
Wenn man die Helper voneinander ableitet, wäre das Problem behoben.
(Nja, man hätte es doch stattdessen so implementieren können, daß erst beim Aufruf einer Helpermethode diese Abhängigkeiten geprüft worden wären und hätte dann dort eine Fehlermeldung geworfen)
$2B or not $2B
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#529

AW: Delphi XE3?

  Alt 6. Sep 2012, 13:34
Ich würde Helper überhaupt nicht nehmen. Dafür gibt es Klassen und Vererbung. Helper sollten die absolute Ausnahme bleiben. Schon wie der Name sagt, es sind Helfer. Also für Integer oder Floats z.b.. Ausserdem sind sie eigentlich nur für geschlossene Objekte gedacht, wo man den Quellcode nicht hat/kennt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi XE3?

  Alt 6. Sep 2012, 14:00
Wieso nicht?

Verteilte Objekte

Man könnte zu Einer Klasse/Type mehrere Methoden-Listen erstellen, vorallem wenn man nicht immer alles braucht.

Gut, man kann weitere Klassen, über Property verschachtelt anbieden, aber da hat der Compiler es schwer (es ist unmöglich) daß der Compilier dieses wegoptimiert,
denn über das vorhandene Property, aber vorallem über das interne Feld (wo z.B. diese Objektinstanz gespeichert werden muß), ist diese Klasse immer bekannt und wird auch immer einkompiliert.

Die Andere Lösung ist eine komplett unabhängig Klasse, welche, wenn man sie nicht verwendet, natürlich nicht einkompiliert wird.
Da der Helper ebenfalls "unabhängig" ist, da die eigentliche Klasse/Typ Diesen nicht kennt, kann hier der Compiler es ebenfalls wegoptimieren.


Genauso wie alles immer vorhanden ist, welches irgendwo in den Initialization-Abschnitten initialisiert wird.
Nutzt man stattdessen den Class-Constructor, dann kann der Compilier diese Klasse weglassen, da die Initialization nicht statisch eingebunden wurde.
PS: Das ist auch einer der Gründe, warum bei der VCL alles so groß wird, im Vergleich zum NonVCL.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 53 von 56   « Erste     343515253 5455     Letzte »    


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 05:52 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