AGB  ·  Datenschutz  ·  Impressum  







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

Wirkliche Unterschiede??

Ein Thema von Delbor · begonnen am 24. Apr 2017 · letzter Beitrag vom 24. Apr 2017
Antwort Antwort
Seite 1 von 2  1 2      
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.199 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 11:03
Hi DeddyH
Ehrlich gesagt, war ich auch zu faul, um nachzusehen - ich ging allerdings davon aus, dass mit Add etwas einer Liste oder einer Collection hinzugefügt wird. Also müsste das, was da hinzugefügt wird, unter beiden Schreibweisen schon bekannt sein.

Angenommen, Dings ist ein Object:
Methoden:
-Add;
Propertys:
-Percmax : integer;
-Percmin : integer;
-SourceDataType := TWasAuchImmer;
-TargetDataType := TWasAuchImmer;


Um nun an die Propertys Werte zuzuweisen, brauche ich doch gar keine Methode Add, sondern kann die neuen Werte direkt zuweisen:
Dings.PrecMax := 19;
Delphi-Quellcode:
var
  Dings: TWasAuchImmer;
begin
  Dings := MapRules.Add;
  Dings.PrecMax := 19;
  Dings.PrecMin := 4;
  Dings.SourceDataType := dtFmtBCD;
  Dings.TargetDataType := dtCurrency;
Das hier lese ich so:

Dings ist ein Object der Klasse TWasAuchImmer
Dieser Klasse wird
-eine Unterklasse (Dings.Add)
-ein Property oder
-eine Methode
zugewiesen. Letztere zwei Punkte fallen weg. Somit wäre nur eine Wertzuweisung an die Unterklasse 'Add' der Dings-Klasse möglich. Da 'PrecMax ' in der Unterklasse bekannt ist, gibts auch keinen Fehler.
Aber wer nennt seine Klasse schon 'Add'??

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 11:05
Add ist keine Klasse! Das ist eine Methode (Funktion) der Klasse, von der MapRules ist (TMapRules vermutlich). Diese Funktion gibt Dir eine Instanz zurück, und dieser Instanz weist Du nun die Werte zu.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 11:09
Also so wie ich die gängigen Add-Methoden kenne (bei TListView u.ä.) ist DeddyHs Variante die einzig korrekte Alternative zu dem with...do-Statement.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.199 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 11:17
Hi HobbyCoder
Zitat:
Das hier erzeug aber nur eine Instanz, und das ist dann auch der Unterschied.
Ich fragte nicht nachdem Unterschied von meinem Codeschnipsel zu demjenigen von DeddyH. Die Frage war nach dem Unterschied der Syntax, wie ich sie in der Demo angetroffen habe und meinem Konstrukt:
Delphi-Quellcode:
      with MapRules.Add do begin
        PrecMax := 19;
        PrecMin := 4;
        SourceDataType := dtFmtBCD;
        TargetDataType := dtCurrency;
      end;
Oben das in der Demo angetroffene Konstrukt, unten das Konstrukt, das ich satt dessen zu verwendsen gedachte und das zu einer AV führte.
Delphi-Quellcode:
// MapRules.Add(PrecMax := 2);
// MapRules.Add(PrecMin := 0);
// MapRules.Add(SourceDataType := dtFmtBCD);
// MapRules.Add(TargetDataType := dtBoolean);
Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 11:24
Hat sich das kompilieren lassen? Damit hätte ich jetzt nicht gerechnet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 11:27
hier, guckt doch einfach in die Wiki :p
Thomas
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.019 Beiträge
 
#7

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 11:32
Hi HobbyCoder
Zitat:
Das hier erzeug aber nur eine Instanz, und das ist dann auch der Unterschied.
Ich fragte nicht nachdem Unterschied von meinem Codeschnipsel zu demjenigen von DeddyH. Die Frage war nach dem Unterschied der Syntax, wie ich sie in der Demo angetroffen habe und meinem Konstrukt:
Delphi-Quellcode:
      with MapRules.Add do begin
        PrecMax := 19;
        PrecMin := 4;
        SourceDataType := dtFmtBCD;
        TargetDataType := dtCurrency;
      end;
Oben das in der Demo angetroffene Konstrukt, unten das Konstrukt, das ich satt dessen zu verwendsen gedachte und das zu einer AV führte.
Delphi-Quellcode:
// MapRules.Add(PrecMax := 2);
// MapRules.Add(PrecMin := 0);
// MapRules.Add(SourceDataType := dtFmtBCD);
// MapRules.Add(TargetDataType := dtBoolean);
Gruss
Delbor
Zum esten habe ich mich auf den Titel "Wirklich Unterschiede" bezogen.
Zum zweiten, einmal ist es eine Instanz und einmal sind es 4 Instanzen. Ist für mich ein entscheidender unterschied.
Zum dritten, was weiß ich denn, was in der Add-Methode steht, und welche Parameter du da überhaupt übergeben kannst, oder ob es da überladene Methoden gibt. Schau doch mal nach.

Fakt ist jedenfalls, dass With..do alles mit einer Instanz mache und 4 mal x.Add() mit 4.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.199 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 11:44
HI DeddyH
Zitat:
Add ist keine Klasse! Das ist eine Methode (Funktion) der Klasse, von der MapRules ist (TMapRules vermutlich). Diese Funktion gibt Dir eine Instanz zurück, und dieser Instanz weist Du nun die Werte zu.
Ich ging eigentlich erstmal auch davon aus, dass Add eine Methode von MapRules ist und war deshalb auch erstaunt, dass das Konstrukt
 MapRules.Add(PrecMax := 2); nicht funktionierte.
Daher auch meine Vermutung, dass Add eine Klasse mit dem Property PrecMax sein müsste. Aber eben: wer nennt seine Klasse schon 'Add'??

@Bernhard Geyer: Die Demo ist das program Indices aus Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDQuery, falls das interessiert.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.199 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 12:10
Hi Hobbycoder

Zitat:
Zum zweiten, einmal ist es eine Instanz und einmal sind es 4 Instanzen. Ist für mich ein entscheidender unterschied.
Hmm....

Delphi-Quellcode:
var Adresslist: TStringlist;

Adresslist.Add(xxxx);
Adresslist.Add(xxxx);
Adresslist.Add(xxxx);
Adresslist.Add(xxxx);
Das ist definitiv immer die gleiche Instanz und auch immer die gleiche Add-Methode.
In einem With-Konstrukt würde ich das allerdings so schhreiben:
Delphi-Quellcode:
with Adresslist do begin
Add(xxxx);
Add(xxxx);
Add(xxxx);
Add(xxxx);
end;
Nach dem Angetroffenen Konstrukt ginge dies offenbar aber auch so:
Delphi-Quellcode:
with Adresslist.Add do begin
y:=xxxx;
y:=xxxx;
fy:=xxxx;
dy:=xxxx;
end;
@bra:
Zitat:
ist was vollkommen verschiedenes, sofern sich das zweite überhaupt kompilieren lässt. So das sollte doch inzwischen geklärt sein, oder nicht?
Ich verstehe es jedenfalls noch nicht. Offenbar wird im with-Konstrukt die Methode 'Add' eines Objektes aufgerufen. Oder übersehe ich da einfach, dass in einem "with Object.Add" - Konstrukt der Compiler alles innerhalb als String interpretiert?

Gruss
Delbor

PS: Das hier hab ich allerdings bis jetzt übersehen (Antwort 11 von Towmuz):
Zitat:
hier, guckt doch einfach in die Wiki :p
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (24. Apr 2017 um 12:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#10

AW: Wirkliche Unterschiede??

  Alt 24. Apr 2017, 12:15
Delphi-Quellcode:
type
  TMyItem = class
    ...
  end;

  TMyItemList = class
    ...
    function Add: TMyItem;
  end;
So oder so ähnlich dürfte die Konstellation aussehen. Der Aufruf von Add führt dazu, dass TMyItemList eine neue Instanz von TMyItem erzeugt, diese in seiner internen Liste ablegt und zurückgibt. Das bedeutet, dass mit jedem Aufruf von Add eine neue Instanz erzeugt und zurückgegeben wird. Jetzt klarer?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 05:15 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