![]() |
Delphi-Version: 5
"strong alias" / "weak alias"?
Zitat:
Was ich bisher kenne ist
Delphi-Quellcode:
Ist sowas gemeint? Und falls ja was ist das Neue daran bei D12?
type
TAliasA = TBla; TAliasB = type TBla; |
AW: "strong alias" / "weak alias"?
Ich denke, es geht nur um die internen Delphi-Typen, wie NativeInt, welche sich beim overload jetzt anders verhalten.
Der NativeIn verändert seinen Typ, je nach Plattform mal Int32 oder Int64, dies hat einige Probleme erzeugt. Früher war der overload so möglich, jetzt nicht mehr. Zitat:
Delphi-Quellcode:
procedure doIt( I : Integer ); overload;
procedure doIt( I : Int64 ); overload; procedure doIt( I : NativeInt ); overload; // Error 120 nativeint it’s a redeclaration. Zitat:
Delphi-Quellcode:
procedure doIt( I : Integer ); overload;
procedure doIt( I : Int64 ); overload; Zitat:
Delphi-Quellcode:
procedure doIt( I : NativeInt ); overload;
|
AW: "strong alias" / "weak alias"?
Liste der Anhänge anzeigen (Anzahl: 2)
Gute Frage, laut Hilfe (DocWiki) gibt es in C++ ein Attribut, für Weak-Typen.
![]() Im Delphi probiert, funktioniert es nicht.
Delphi-Quellcode:
Prinzipiell gibt es das schon ewig, aber das Verhalten des Compilers hat sich geändert
type
[Weak] NewInt = type Integer; // wirkungslos (keine CompilerWarnung, aber Weak hat eh nur eine Wirkung auf Variablen mit Managed-Types ala Interface) NewInt = [Weak] type Integer; // compiliert nicht NewInt = type [Weak] Integer; // compiliert nicht und dementsprechend haben sie einige "ihrer" Typen ab jetzt anders deklariert, Scheinbar war NativeInt früher sowas wie ein
Delphi-Quellcode:
und ist nun nur noch
type Integer
Delphi-Quellcode:
.
Integer
Aber der Compiler und CodeInsight behandeln nun "Alias" anders. Früher wurde beim CodeInsight (CodeCompletion) und HelpInsight (Hint mit Deklaration) immer der "ursprüngliche" Typ angezeigt, aber jetzt der "Deklarierte". Und das hat endlich einen enormen Vorteil, denn wenn du dir im Editor die Deklaration von SendMessage ansiehst, dann steht dort endlich LPARAM/WPARAM/LRESULT und nicht nur NativeInt, bzw. ganz früher Integer. siehe Anhang -> HWND ist ein eigener Typ (stong-type) und der Rest nur ein Alias (weak-type)
Delphi-Quellcode:
type
AliasInt = Integer; NewInt = type Integer; TTest = record procedure doIt(I: Integer); overload; procedure doIt(I: Int64); overload; //procedure doIt(I: NativeInt); overload; // unter D11 konnte man das noch deklarieren, da NativeInt ein "eigener" Typ war //procedure doIt(I: AliasInt); overload; // geht nicht, weil ist Typ "identisch" mit Integer procedure doIt(I: NewInt); overload; end; procedure TForm2.FormCreate(Sender: TObject); var i4: Integer; // Int32 = Integer i8: Int64; ix: NativeInt; ai: AliasInt; ni: NewInt; lp: LPARAM; // LPARAM = INT_PTR = IntPtr = NativeInt Test: TTest; begin Test.doIt(i4); Test.doIt(i8); Test.doIt(ix); // im D11 weiß NativeInt nicht wo hint, alo ob Integer oder NewInt Test.doIt(ai); // Links die Maus über "ai" halten - früher wurde es überall als "Integer" angezeigt, jetzt als "AliasInt" Test.doIt(ni); Test.doIt(lp); // seid D12 wird es als "LPARAM" angezeigt, aber früher als "NativeInt" end; procedure TTest.doIt(I: Integer); begin end; procedure TTest.doIt(I: Int64); begin end; {procedure TTest.doIt(I: NativeInt); begin end;} procedure TTest.doIt(I: NewInt); begin end; PS: Ich hab soeben beim "Verantwortlichen" nochmal nachgefragt ... mal sehn ob/was er antwortet. ![]() |
AW: "strong alias" / "weak alias"?
Das
Delphi-Quellcode:
Keyword solltest du aber weglassen, denn damit deklarierst du einen definitiv anderen Typ.
type
|
AW: "strong alias" / "weak alias"?
Danke Euch allen. Dann lege ich die Sache für mich und behalte das mal im Hinterkopf. Falls wir in unserem Projekt diesen NativInt verwendet haben kümmert sich ein Kollege daram :-D
Zitat:
Ich persönlich verwende selten Aliase und wenn dann kommt es darauf an. Klar, mit type ist es ein nuer Typ. Dafür bekommt man die Typsicherheit. Ich könnte mir sowas vorstellen:
Delphi-Quellcode:
Mit dem type könnte man verhindern, dass man als Entwickler versehentlich mal was falsch zuweist. (Dafür handelt man sich woanders recht viel Arbeit ein.)
type
TDistance = type Double; TAngle = type Double; |
AW: "strong alias" / "weak alias"?
Zitat:
|
AW: "strong alias" / "weak alias"?
Das war ja nur für den Vergleich von MIT und OHNE :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 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