AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Aufrechnen von Integer-Werten in ein neues Ergebnis
Thema durchsuchen
Ansicht
Themen-Optionen

Aufrechnen von Integer-Werten in ein neues Ergebnis

Ein Thema von EdAdvokat · begonnen am 1. Feb 2018 · letzter Beitrag vom 2. Feb 2018
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 2. Feb 2018, 12:13
Wäre dies im konkreten Fall eine Möglichkeit?
Heißt das beispielsweise, ich könnte mit dieser Möglichkeit die "Aufaddierung" mittels class function realisieren und dann nach Instanzierung der class ausführen?
Nein, wenn du deine Addition Funktion ohne Änderungen beibehalten willst, darfst/kannst du sie nicht zu einer class procedure machen, da dann nicht mehr auf die (Instanz-)Felder FErgebnis, FZahl1 und FZahl2 zugegriffen werden kann. Die Begründung hast du dir schon selbst gegeben mit
Man könne eine class procedure auch dann ausführen, wenn die Klasse noch garnicht instanziert wurde habe ich gelesen
Die ist nämlich vollkommen korrekt. Der Aufruf würde dann über TMyClass.Test() erfolgen anstelle von TMyClass.Create.Test() bzw. MyClassInstanze.Test() .

Es gibt im Grunde 3 verschiedene Varianten, die man betrachten muss:
  1. procedure Test;
    Dies ist eine Instanz-Methode, welche im versteckten Self Parameter einen Zeiger auf die aktuelle Instanz beinhaltet
  2. class procedure Test;
    Im Grunde noch nicht sehr verschieden zur "normalen" Methode, nur mit dem Unterschied, dass Self hier nicht auf die Instanz verweist, sondern auf die Klasse. Zugriff auf "normale" Instanz-Felder bzw. -Methoden ist hier schon nicht mehr möglich.
  3. class procedure Test; static;
    Bei dieser Variante fehlt der Self Parameter komplett. Hierdurch bedingt gellten die gleichen Einschränkungen wie bei einer class procedure ohne static . Diese Art von "Methode" kann (und wird oft) auch in Records verwendet werden. Hierbei ist diese Deklaration unter der Haube komplett identisch mit einer normalen procedure , die du außerhalb einer Klasse (z.b. "freischwebend" im implementation Abschnitt deiner Unit) deklarierst.

Wofür benutzt man diese grundsätzlich überhaupt?
Es ist im Grunde einfach die modernere Schreibweise für ansonsten besagte "freischwebende" Funktionen. Vorteil ist, dass die "Methode" dann thematisch einer Klasse/einem Record zugeordnet werden kann und somit dann an einer Stelle deklariert wird, an der es vom Kontext her Sinn macht. Außerdem kann es als kleine Performanceoptimierung angesehen werden und sollte meiner Meinung nach auch immer eingesetz werden, wenn man eine Methode schreibt, die tatsächlich die konkrete Instanz nicht kennen muss.

Wäre das Additionsbeispiel mit der von mir gewollten "Aufaddition" für ein Beispiel mit class function geeignet und könntest Du mir da etwas aufzeigen?
Ohne Änderung und mit den Feldern so nicht machbar. Möglich wäre allerdings der schonmal genannte Prototyp class function TAddition.Add(Value1, Value2: Integer): Integer; static; .
Statt
Delphi-Quellcode:
Add.Zahl1 := StrToIntDef(edtZahl1.text,0);
Add.Zahl2 := StrToIntDef(EdtZahl2.Text, 0);
Add.Addition;
LblErgebnis.Caption := IntToStr(Add.Ergebnis);
würde sich dein Aufruf dann in
Delphi-Quellcode:
LblErgebnis.Caption :=
  IntToStr(TAddition.Add(StrToIntDef(edtZahl1.text,0), StrToIntDef(edtZahl2.text,0));
ändern.

Wie du siehst wäre dann hierfür auch keine Instanz notwendig. Die Aufsummierung kann man allerdings nicht in dieser Form umschreiben, da du dir hier den Wert ja zwischen zwei Aufrufen merken willst, demnach also zwingend eine Instanz mit Feld benötigst.

Edit:
Noch eine Verfahrensfrage: Wie füge ich ein Zitat mit dem Hinweis von wem es kommt hier ein
Dazu kannst du einfach auf den "Zitat" Button rechts unterhalb eines beliebigen Beitrags klicken.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 2. Feb 2018 um 12:16 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 2. Feb 2018, 12:32
Danke Zacherl für Deine Hinweise. Ich werde das gleich mal durchexerzieren. Auch Danke für den Hinweis mit dem Zitat. Ich habe überall gesucht und bin einfach nicht darauf gekommen, dass es auf der gleichen Seite den entspr. Button gibt.
Nochmals vielen Dank auch an die anderen user für die Hinweise.
Norbert
  Mit Zitat antworten Zitat
Antwort Antwort


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