Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Variablenname mehrere Typen (https://www.delphipraxis.net/185410-variablenname-mehrere-typen.html)

Antonov 7. Jun 2015 21:34

Variablenname mehrere Typen
 
So, ich weiß nicht einmal wirklich, wie ich dieses Problem benennen soll (deswegen war meine Suche erfolglos)

Ich möchte folgendes:
ich möchte einem Variablennamen je nach Bedarf zwei verschiedene Veriablentypen zuweisen.
In meinem Fall würde ich je nach Bedarf dem Namen "MyPopupsource" - der Parent eines TPopupcomponents - entweder TLabel oder TPanel zuweisen.
Ich könnte natürlich zwei ähnliche Prozeduren schreiben, aber ich möchte das elegant lösen.

Leider finde ich im Internet und diesem Forum nichts vergleichbares, darum muss ich mich direkt and euch wenden. Jemand eine Idee?

himitsu 7. Jun 2015 21:43

AW: Variablenname mehrere Typen
 
Wenn man das kleinsten gemeinsamen Teiler benutzt, dann geht alles.

Also einen Typen, von welchem beide Klassen erben. (ganz oben ist immer TObject und dazwischen liegt oft auch TComponent)
Meistens nimmt man den kleinsten Typen, welcher die nötigen Funktionen implementiert.

Perlsau 7. Jun 2015 22:43

AW: Variablenname mehrere Typen
 
Zitat:

Zitat von Antonov (Beitrag 1304429)
Ich könnte natürlich zwei ähnliche Prozeduren schreiben, aber ich möchte das elegant lösen.

Was findest du an overload unelegant? Mit der Direktive overload ist es möglich, zwei oder mehr Varianten einer Methode oder einer Routine zu schreiben:
Delphi-Quellcode:
function Divide(x, y: real): real; overload;
begin
  result := x / y;
end;
 
function Divide(x, y: integer): integer; overload;
begin
  result := x div y;
end;
Beispiel entnommen aus dem entsprechenden Tutorial beim Delphi-Treff.

BUG 7. Jun 2015 23:10

AW: Variablenname mehrere Typen
 
Zitat:

Zitat von himitsu (Beitrag 1304431)
Also einen Typen, von welchem beide Klassen erben. (ganz oben ist immer TObject und dazwischen liegt oft auch TComponent)

Je nachdem was du machen willst, kannst du eventuell auch in der Prozedur gleich mit einem gemeinsamen Vorfahren arbeiten.
Der am meisten spezialisierte gemeinsame Vorfahre von TLabel und TPanel ist TControl. Der hat schon ein paar öffentliche Eigenschaften.

Zitat:

Zitat von Perlsau (Beitrag 1304436)
Was findest du an overload unelegant?

Wenn man einen passenden gemeinsame Vorfahren hat (oder Templates; SCNR) hat, dann können sehr ähnliche (nicht-triviale) überladene Funktionen unelegant sein.

Popov 7. Jun 2015 23:53

AW: Variablenname mehrere Typen
 
Quatsch gelöscht!

Dejan Vu 8. Jun 2015 07:00

AW: Variablenname mehrere Typen
 
Die Fragestellung deutet auf ein verbesserungswürdiges Design hin. Beschreibe doch mal, weshalb Du deine Variable -je nach Anwendungsfall- unterschiedlich deklarieren willst.

himitsu 8. Jun 2015 07:16

AW: Variablenname mehrere Typen
 
Genau das löst sich ja mit dem gemeinsamen Vorfahren auf ... nur noch ein Code für diesen einen Vorfahren.

Jasocul 8. Jun 2015 07:23

AW: Variablenname mehrere Typen
 
TControl ist der erste gemeinsame Vorfahr.

Jetzt stellt sich die Frage, auf welche Methoden und Eigenschaften will der TE zugreifen? Schon "Caption" gibt es noch nicht in TControl. Und ein Zugriff auf TLabel ohne die Nutzung der Caption stelle ich mir relativ sinnlos vor.
Natürlich kann man ein Typecast machen. Aber dann muss man im Source ja doch wieder unterscheiden, was man gerade benutzen möchte. Der Vorteil ist futsch.

Man muss sich also auch die Frage stellen, wie sinnvoll die Nutzung des gemeinsamen Vorfahren ist. Es kann durchaus sein, dass es dadurch komplizierter wird, als 2 Variablen mit unterschiedlichem Typ zu haben. Man verliert in einem gewissen Rahmen auch die Typsicherheit.

Vielleicht lohnt es sich ja auch, eine eigene Komponente dafür zu programmieren. Diese kann ja von TLabel oder TPanel abgeleitet sein. Kommt halt drauf an, was besser zur Lösung der Aufgabe passt.

Dejan Vu 8. Jun 2015 07:25

AW: Variablenname mehrere Typen
 
Zitat:

Zitat von himitsu (Beitrag 1304454)
Genau das löst sich ja mit dem gemeinsamen Vorfahren auf ... nur noch ein Code für diesen einen Vorfahren.

Es kaschiert eher das Problem.

himitsu 8. Jun 2015 08:51

AW: Variablenname mehrere Typen
 
Wieso?

Wenn das Feature bereits in dem Vorfahren drin ist, dann ist das praktisch DIE Lösung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 Uhr.
Seite 1 von 2  1 2      

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