AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Begrenzter String, TList und InterfaceObject > Datenmüll
Thema durchsuchen
Ansicht
Themen-Optionen

Begrenzter String, TList und InterfaceObject > Datenmüll

Ein Thema von QStorm · begonnen am 9. Sep 2015 · letzter Beitrag vom 10. Sep 2015
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Begrenzter String, TList und InterfaceObject > Datenmüll

  Alt 9. Sep 2015, 10:23
Das dürfte nicht erlaubt sein. Diese würden mit großer Wahrscheinlichkeit auch nicht so einfach unter XE8 funktionieren.
Doch, funktionieren tut das, aber das Veröffentlichen ist (mir zumindest) nicht erlaubt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Begrenzter String, TList und InterfaceObject > Datenmüll

  Alt 9. Sep 2015, 10:23
Schreib doch mal MEissing an und frage nach einer schnellen Lösung.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Begrenzter String, TList und InterfaceObject > Datenmüll

  Alt 9. Sep 2015, 10:35
Es gibt aber Abhilfe
Delphi-Quellcode:
program dp_186522;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.Generics.Collections,
  System.SysUtils;

type
  TMyID = string[ 10 ];

  IMyObject<T> = interface
    [ '{22041332-1221-4EBD-BBC5-1AF3C914E08B}' ]
    procedure AddValue( const Value: T );
    function GetValue( const Index: Integer ): T;
  end;

  TMyObject<T> = class( TInterfacedObject, IMyObject<T> )
  strict private
    internalList: TList<T>;
  public
    constructor Create;
    destructor Destroy; override;

    procedure AddValue( const Value: T );
    function GetValue( const Index: Integer ): T;
  end;

  TWrap<T> = record
  private
    FValue: T;
  public
    class operator implicit( const a: T ): TWrap<T>;
    class operator implicit( const a: TWrap<T> ): T;
  end;

  TMyWrappedObject<T> = class( TInterfacedObject, IMyObject<T> )
  strict private
    internalList: TList<TWrap<T>>;
  public
    constructor Create;
    destructor Destroy; override;

    procedure AddValue( const Value: T );
    function GetValue( const Index: Integer ): T;
  end;

  { TMyObject<T> }

procedure TMyObject<T>.AddValue( const Value: T );
begin
  internalList.Add( Value );
end;

constructor TMyObject<T>.Create;
begin
  inherited;
  internalList := TList<T>.Create;
end;

destructor TMyObject<T>.Destroy;
begin
  internalList.Free;
  inherited;
end;

function TMyObject<T>.GetValue( const Index: Integer ): T;
begin
  Result := internalList[ index ];
end;

{ TWrap<T> }

class operator TWrap<T>.implicit( const a: T ): TWrap<T>;
begin
  Result.FValue := a;
end;

class operator TWrap<T>.implicit( const a: TWrap<T> ): T;
begin
  Result := a.FValue;
end;

{ TMyWrappedObject<T> }

procedure TMyWrappedObject<T>.AddValue( const Value: T );
begin
  internalList.Add( Value );
end;

constructor TMyWrappedObject<T>.Create;
begin
  inherited;
  internalList := TList < TWrap < T >>.Create;
end;

destructor TMyWrappedObject<T>.Destroy;
begin
  internalList.Free;
  inherited;
end;

function TMyWrappedObject<T>.GetValue( const Index: Integer ): T;
begin
  Result := internalList[ index ];
end;

procedure Test1;
var
  ID1, ID2: TMyID;
  Liste : TList<TMyID>;
begin
  ID1 := ( 'ABCDEFGHIJ' );
  Liste := ( TList<TMyID>.Create );
  Liste.Add( ID1 );
  ID2 := ( Liste[ 0 ] );
  Assert( ID1 = ID2 );
end;

procedure Test2;
var
  ID1, ID2: TMyID;
  MyObj1 : IMyObject<TMyID>;
begin
  ID1 := ( 'ABCDEFGHIJ' );
  MyObj1 := ( TMyObject<TMyID>.Create );
  MyObj1.AddValue( ID1 );
  ID2 := ( MyObj1.GetValue( 0 ) );
  Assert( ID1 = ID2 );
end;

procedure Test3;
var
  ID1, ID2: TMyID;
  MyObj1 : IMyObject<TMyID>;
begin
  ID1 := ( 'ABCDEFGHIJ' );
  MyObj1 := ( TMyWrappedObject<TMyID>.Create );
  MyObj1.AddValue( ID1 );
  ID2 := ( MyObj1.GetValue( 0 ) );
  Assert( ID1 = ID2 );
end;

begin
  try
    Test1;
    Test2; // fails
    Test3; // pass
  except
    on E: Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;
  Readln;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
QStorm

Registriert seit: 28. Jun 2008
46 Beiträge
 
#14

AW: Begrenzter String, TList und InterfaceObject > Datenmüll

  Alt 9. Sep 2015, 11:44
Kann einer bitte die Units "System.Generics.Collections" und "System.Generics.Defaults" von Delphi XE7 posten?
Glaube ich mal eher nicht, denn die sind urheberrechtlich geschützt!
Kann man sich die mit einer XE8 Lizenz irgendwo runterladen, ohne Delphi neu zu installieren (ist ja im Kaufpreis von XE8 enthalten)?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Begrenzter String, TList und InterfaceObject > Datenmüll

  Alt 9. Sep 2015, 12:10
Nein, ist nur verschlüsselt im Setup enthalten. (natürlich installieren mit der XE7-Lizenz)

In VM/Sandbox installieren?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
QStorm

Registriert seit: 28. Jun 2008
46 Beiträge
 
#16

AW: Begrenzter String, TList und InterfaceObject > Datenmüll

  Alt 10. Sep 2015, 13:48
Ich danke euch allen für die Antworten und Abhilfe.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:41 Uhr.
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