AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi for..in Schleifen: Wie in Win32 realisiert?
Thema durchsuchen
Ansicht
Themen-Optionen

for..in Schleifen: Wie in Win32 realisiert?

Ein Thema von choose · begonnen am 26. Sep 2004 · letzter Beitrag vom 26. Sep 2004
 
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#1

for..in Schleifen: Wie in Win32 realisiert?

  Alt 26. Sep 2004, 19:04
Wie Danny Thorpe in seinem Blogbeitrag New For Loop Syntax beschreibt, John Kaster im BDNtv: Diamondback sneak peek zeigt und hier ua bereits im Thema for-each Schleife in Delphi diskutiert worden ist, soll Diamondback nun Schleifenkonstrukte der Art
for <variable> in <container expression> do <statement>; in Szenarien wie
Delphi-Quellcode:
type
  TMultiArray = array [0..10, 0..3, 0..9] of Integer;

procedure DemoMulti(const table: TMultiArray);
var
  X: Integer;
begin
  for X in table do
    Writeln(x);
end;
aber auch
Delphi-Quellcode:
procedure DemoTStrings(const AStrings: TStrings);
var
  S: string;
begin
  for S in AStrings do
    Writeln(S);
end;
unterstützen.

Während Danny bei Ordinaltypen und Arrays von speziell vom Compiler verarbeiteten, also CompilerMagic, spricht, schweigt sich John über die Realisierung von Klassen (hier: TStrings), die das neue For-Konstrukt unterstützen sollen, aus. Danny schreibt zwar, dass der Containerausdruck
Zitat von danny:
either implements the IEnumerable interface, or implements a pattern that the compiler recognizes as an enumerator, or is a type that the compiler recognizes as being a container of data items, such as an array
und spricht im letzten Fall offensichtlich von Fällen jener Übersetzungsmagie während der erste dem Ansatz in etwa der in Java-Tiger eingeführten Lösung zu entsprechend scheint- unklar hingegen bleibt mir die Aussage, dass
Zitat von Übersetzung der Aussage von Danny:
eine Klasse implementiert ein Muster, das der Compiler als Enumerator erkennt
Wird hier auf die Meta-Ebene gegangen und die Signatur von Methoden auf die Teilbegriffe "Count", "Item" oder sonstigen für Delphi typischen Bezeichnungen für Problemlösungen dieser Art geprüft? Hätte John in seinem Preview nicht explizit gezeigt, dass die Verarbeitung mit TStrings auch unter Win32 funktioniert und erwähnt, dass die VCL generell angepasst wird, um die neue For-Schleife zu unterstützen, hätte ich mich nicht weiter gewundert, nun jedoch stellt sich für mich folgendes Problem:

Mir ist unklar, wie eine Delphi-Win32-Klasse unter Verwendung der besherigen Referenzzählung ein bestimmtes Interface implementieren sollte und ein Objekt dieser Klasse in der oben beschriebenen Form aufgerufen werden kann, ohne dass ein Verringern des Referenzzählers nach Gebrauch auf null zu dessen Freigabe führt!
Beispiel:
Delphi-Quellcode:
var
  MyStrings: TStrings;
  S: string;
begin
  MyStrings := TStringList.Create;
  try
    //...
    for s in MyStrings do // use IEnumerable -> _AddRef
      Writeln(s);
  finally // leave scope of IEnumerable -> _Release -> .Destroy
    FreeAndNil(MyStrings); // tries to destroy object again!
  end;
Weiß jemand von Euch hierzu etwas genaueres und ist die Schnittstelle von IEnumerable bekannt?

Update: Titel des Themas
gruß, choose
  Mit Zitat antworten Zitat
 


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 22:20 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