AGB  ·  Datenschutz  ·  Impressum  







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

Variablenname mehrere Typen

Ein Thema von Antonov · begonnen am 7. Jun 2015 · letzter Beitrag vom 8. Jun 2015
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Variablenname mehrere Typen

  Alt 7. Jun 2015, 23:53
Quatsch gelöscht!

Geändert von Popov ( 7. Jun 2015 um 23:56 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 07:00
Die Fragestellung deutet auf ein verbesserungswürdiges Design hin. Beschreibe doch mal, weshalb Du deine Variable -je nach Anwendungsfall- unterschiedlich deklarieren willst.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 07:16
Genau das löst sich ja mit dem gemeinsamen Vorfahren auf ... nur noch ein Code für diesen einen Vorfahren.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 07:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 08:51
Wieso?

Wenn das Feature bereits in dem Vorfahren drin ist, dann ist das praktisch DIE Lösung.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antonov

Registriert seit: 11. Apr 2014
21 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 09:14
TComponent als gemeinsamer Vorfahre funktioniert, prima. Danke!
Dabei find ich es merkwürdig, dass TControl oder TWinControl beide nicht funktionieren. So aus Neugier, weiß einer warum?

Das mit dem Overload probiere ich gleich mal aus, klingt interessant.
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:
Das setzt voraus, dass ich weiß was Overload ist. Ich bin Amateur, also entspannt euch
Ich Probier die Overload Direktive mal aus (nachdem ich herausfinde, wie sie funktioniert), vielleicht ist sie nützlich.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 09:23
Ich Probier die Overload Direktive mal aus (nachdem ich herausfinde, wie sie funktioniert), vielleicht ist sie nützlich.
Das ist einfach: die Prozedur oder Funktion muss gleichen Namen haben, muss sich aber bei den Parametern unterscheiden. Dann muss die Prozedur oder Funktion noch mit der Direktive Overlaod deklariert werden. Meiner Kenntnis nach, ich hab es aber nicht getestet, müssen sich die Parameter unterscheiden. Unterschiedliche Ergebnisse bei Funktionen reichen meiner Kenntnis nach nicht aus.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 09:23
Das mit dem Overload probiere ich gleich mal aus, klingt interessant.
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:
Das setzt voraus, dass ich weiß was Overload ist. Ich bin Amateur, also entspannt euch
Ich Probier die Overload Direktive mal aus (nachdem ich herausfinde, wie sie funktioniert), vielleicht ist sie nützlich.
Overload ist der Fachausdrück für Überladen. Du kannst eine Routine oder eine Methode (also eine Procedure oder eine Function) überladen. Das bedeutet, daß Delphi je nach Zusammensetzung der Parameter die jeweils richtige Routine auswählt. In obigem Beispiel wird einmal ein Integer übergeben und ein Integer im Result zurück erwartet. Rufst du also die Funtion mit Integer-Variablen auf, wählt Delphi die Integer-Variante. Analog verhält sich das mit der Real-Variante. Probier's doch einfach mal aus – dein PC wird davon schon nicht kaputtgehen, vertrau mir

Wenn es sich dagegen darum handelt, aus einer Basis-Klasse weitere spezialisierte Klassen abzuleiten (was ich angesichts deines Outings als Amateur eher nicht annehme), muß man das anders lösen, wie oben bereits von anderen Usern aufgezeigt.

Nachtrag:

Wenn du deine Methoden im Interface-Teil deklarierst, genügt es, dort die Direktive overload anzugeben. In diesem Falle kannst du sie im Implementation-Abschnitt weglassen:
Delphi-Quellcode:
Interface
...
  Procedure SetMargin(Const RE: TjvDBRichEdit; Const L,R,T,B : Integer); overload;
  Procedure SetMargin(Const RE: TjvRichEdit; Const L,R,T,B : Integer); overload;
...

Implementation

// ----- Ränder bei DB-RichEdits setzen (DBRichEdit)--------
Procedure SetMargin(Const RE: TjvDBRichEdit; Const L,R,T,B : Integer);
Var
  Rect : TRect;
begin
  Rect := RE.ClientRect;
  Rect.Left := Rect.Left + L;
  Rect.Right := Rect.Right - R;
  Rect.Top := Rect.Top + T;
  Rect.Bottom := Rect.Bottom - B;
  SendMessage(RE.Handle,EM_SETRECT,0,LongInt(@Rect));
end;

// ----- Ränder bei RichEdits setzen (RichEdit)-------------
Procedure SetMargin(Const RE: TjvRichEdit; const L, R, T, B: Integer);
Var
  Rect : TRect;
begin
  Rect := RE.ClientRect;
  Rect.Left := Rect.Left + L;
  Rect.Right := Rect.Right - R;
  Rect.Top := Rect.Top + T;
  Rect.Bottom := Rect.Bottom - B;
  SendMessage(RE.Handle,EM_SETRECT,0,LongInt(@Rect));
end;
Mit diesen beiden Proceduren kann ich entweder ein TjvRichEdit oder ein TjvDBRichEdit als Parameter angeben. Delphi wählt anhand der übereinstimmenden Parameter die richtige Procedure aus. Stimmen die übergebenen Parameter mit keiner der Overload-Versionen überein, gibt's eine Fehlermeldung beim Compilieren.

Geändert von Perlsau ( 8. Jun 2015 um 09:39 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 09:46
Dabei find ich es merkwürdig, dass TControl oder TWinControl beide nicht funktionieren. So aus Neugier, weiß einer warum?
Nee, da du es wohl für ein Staatsgeheimnis hältst und uns nicht verraten willst, was nicht funktioniert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.374 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 07:23
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.
Peter
  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 19:23 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