AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Interface und 'normale' Referenz

Ein Thema von hansmaad · begonnen am 6. Sep 2010 · letzter Beitrag vom 7. Sep 2010
 
hansmaad

Registriert seit: 25. Feb 2010
52 Beiträge
 
Delphi 2010 Professional
 
#1

Interface und 'normale' Referenz

  Alt 6. Sep 2010, 14:29
Delphi-Version: 2010
Hallo zusammen,
folgendes Problem. Ich möchte ein Konzept über ein Interface definieren.
Delphi-Quellcode:
type
    IMachtBuh = interface
        procedure Buh;
    end;
Implementiert wird das z.B. von
Delphi-Quellcode:
type
    Foo = class(TInterfacedObject, IMachtBuh)
    public
        procedure Buh;
        procedure WasAnderes;
    end;

procedure Foo.Buh;
begin
    WriteLn('Foo Buh');
end;

procedure Foo.WasAnderes;
begin
    WriteLn('Was anderes');
end;
So, schön. Solche Objekt können jetzt Buh machen.
Delphi-Quellcode:
procedure MachBuh(b : IMachtBuh);
begin
    b.Buh;
end;
Das Problem ist jetzt, dass eine Foo Referenz im Aufruf von MachBuh implizit in ein IMachtBuh konvertiert wird, dass die Instanz am Ende von MachBuh auffrisst.
Delphi-Quellcode:
var
    f : Foo;
begin
    f := Foo.Create;
    MachBuh(f);
    /// ...
    f.WasAnderes; // haha, denkste! f is futsch.
    FreeAndNil(f);
end.
Natürlich kann ich f als IMachtBuh deklarieren, dann hab ich aber keinen Zugriff mehr auf die Konzepte die Foo selber defineirt oder über andere Interfaces erbt. Oder ich mach sowas:
Delphi-Quellcode:
var
    f : Foo;
    dummy : IMachtBuh;
begin
    f := Foo.Create;
    dummy := f;
    MachBuh(f);
    /// ...
    f.WasAnderes;
end.
Was aber auch nicht besonders elegant ist. Oder ich lass mir von Euch erklären wie man es am besten macht.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:39 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 by Thomas Breitkreuz