AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi interfaces: Ein paar grundlegende Fragen (zB. woher die AV?)
Thema durchsuchen
Ansicht
Themen-Optionen

interfaces: Ein paar grundlegende Fragen (zB. woher die AV?)

Ein Thema von yankee · begonnen am 1. Mär 2007 · letzter Beitrag vom 1. Mär 2007
 
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

interfaces: Ein paar grundlegende Fragen (zB. woher die AV?)

  Alt 1. Mär 2007, 16:21
Hi @ll,

alles, was ich an Erfahrung mit Interfaces habe kommt von Java und jetzt probiere ich diese mal in Delphi anzuwenden und .... habe damit ein paar Probleme .

Ich habe mir überlegt eine allgemeine Lösung zum sortieren einer TObjectList zu coden:
Delphi-Quellcode:
unit USortedList;

interface

uses SysUtils, Contnrs;

type

  IComparable =interface
    ['{210AC03E-6716-49A5-8B54-34845AE4A087}']
    function Compare(other: TObject):integer;
  end;
   TSortedList =class(TObjectList)
     public
       function Add(neu: IComparable):integer;
       procedure Sort;
   end;

   TIntTest =class(TInterfacedObject, IComparable)
     public
       v: integer;
       function Compare(other: TObject):integer;
   end;

implementation

function TIntTest.Compare(other: TObject):integer;
begin
  result :=v-TIntTest(other).v;
end;

function TSortedList.Add(neu: IComparable):integer;
begin
  result :=inherited Add(TObject(neu));
end;

procedure TSortedList.Sort;
 procedure QuickSort(iLo, iHi: Integer);
 var
   Lo, Hi: Integer;
   Mid: IComparable;
 begin
   Lo := iLo;
   Hi := iHi;
   Supports(Items[(Lo + Hi) div 2],IComparable,Mid); //Hier gibt es eine AV
   repeat
     while Mid.Compare(Items[Lo]) < 0 do Inc(Lo);
     while Mid.Compare(Items[Hi]) > 0 do Dec(Hi);
     if Lo <= Hi then
     begin
       Exchange(Lo,Hi);
       Inc(Lo);
       Dec(Hi);
     end;
   until Lo > Hi;
   if Hi > iLo then QuickSort(iLo, Hi);
   if Lo < iHi then QuickSort(Lo, iHi);
 end;
begin
  QuickSort(0,Count-1);
end;

end.
Dazu habe ich folgende Fragen:
1. Wofür ist die id (['{210AC03E-6716-49A5-8B54-34845AE4A087}']) gut? Soweit ich das sehe ist die 100% zufällig.
2. TIntTest =class(TInterfacedObject, IComparable) Muss ich das Objekt unbedingt von TInterfacedObject ableiten? Da wäre dann ja schon 80% der Grundidee von interfaces futsch...?! Ich will ja, dass ich meine Klasse, die ich später in der Liste mal speichere möglicherweise von was anderem ableiten.
3. Supports(Items[(Lo + Hi) div 2],IComparable,Mid); Am Anfang habe ich versucht das Objekt einfach zu casten (IComparable(Items[...])) aber wie ich gelesen habe funktioniert das nur in .net uind nicht in D für win32. Aber Supports funktioniert auch nicht so, wie ich gedacht hätte, denn der Aufruf wirft mir eine Access Violation. Warum? Und vorallem: Wie mache ich es richtig?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  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 08:20 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