AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Interfaces in DotNet ganz anders?

Ein Thema von Fingolfin · begonnen am 1. Dez 2004 · letzter Beitrag vom 4. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
Fingolfin

Registriert seit: 8. Okt 2003
62 Beiträge
 
#1

Interfaces in DotNet ganz anders?

  Alt 1. Dez 2004, 20:33
Hi, ich arbeite mich gerade mit Delphi 2005 in DotNet ein und mir ist da etwas aufgestoßen.

Früher (in Win32) hat man interfaces üblicherweise ja so verwendet:

Code:
  ITest = interface
    procedure DoSomething;
  end;

  TTest = class(TInterfacedObject, ITest)
  public
    constructor Create;
    destructor Destroy; override;
    procedure DoSomething;
  end;

var
  FTest: ITest;

procedure InterfaceErzeugen;
begin
  FTest := TTest.Create;
  FTest.DoSomething;
end;

procedure Interfacefreigeben;
begin
  FTest := nil;
end;
Dabei führte das nilen der Interfacereferenz zur Freigabe, es wurde also in diesem Fall das Destroy von TTest aufgerufen.

Unter Delphi 2005 passiert das nicht. Das nilen nilt zwar die Interface-Referenz, der Destructor wird aber überhaupt nicht berührt.

Ich habe jetzt schon Sachen wie

Code:
var
  FTest: TTest;
procedure Irgendwas;
begin
  FTest := TTest.Create;
  FTest.DoSomething;
  FTest.Free;
end;
getestet und die haben anscheinend ohne Probleme funktioniert. Dabei ist doch gerade die Mischung von Object- und Interfacereferenzen das absolut böse "ohoh" in Delphi Win32.

Kann mich da mal jemand aufklären bitte? Bin sehr verwirrt.

Vielen Dank schonmal.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Interfaces in DotNet ganz anders?

  Alt 1. Dez 2004, 20:39
Ich hab mal was gelesen, dass das mit dem free'en was mit der Garbage Collection zu tun hat
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: Interfaces in DotNet ganz anders?

  Alt 1. Dez 2004, 20:41
Interfaces werden unter .NET durch den Garbage Collector verwaltet. Dieser räumt nur in unregelmäßigen Intervallen auf. D.h. Du kannst den Zeitpunkt nicht mehr direkt bestimmen. Muss wohl mal ein Tutorial her

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Fingolfin

Registriert seit: 8. Okt 2003
62 Beiträge
 
#4

Re: Interfaces in DotNet ganz anders?

  Alt 1. Dez 2004, 20:47
Hmm, es ist ja nicht so, daß ich davon noch nicht gehört hätte. Aber wenn dem so wäre müßte der Garbage Collector doch spätestens collecten, wenn die Applikation geschlossen wird. Da passiert aber gar nix.

Waaah, wie soll ich nur programmieren, wenn ich noch nicht mal Code bei der Freigabe eines Objektes ausführen kann?

  Mit Zitat antworten Zitat
Fingolfin

Registriert seit: 8. Okt 2003
62 Beiträge
 
#5

Re: Interfaces in DotNet ganz anders?

  Alt 1. Dez 2004, 20:59
Nachtrag:

Nochmal von der anderen Seite. Normale Objekte kann ich doch auch explizit freigeben (Destroy, Disposable usw.). Das ist doch auch definitiv wichtig, wenn die z.B. die Freigabe eines Objekts andere Objekte über dessen Tod benachrichtigen soll (Bsp.: Katze, du brauchst keine Mäuse mehr jagen, die sind alle am Rattengift gestorben). Ich kann mir einfach nicht vorstellen, daß Interfaces hier derart aus der Rolle fallen. Das würde ihren Wert doch massiv schmälern.

Vielleicht ist mein zweiter Ansatz (Mischung von Objekt- und Interfacereferenzen) doch naheliegender. Kann es sein, daß eine solche Herangehensweise jetzt erzwungen wird?

Hmm, vielleicht kann ja noch jemand Licht in das Dunkel bringen.

Auf jeden Fall schonmal vielen Dank.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Interfaces in DotNet ganz anders?

  Alt 1. Dez 2004, 21:06
Du könntest versuchen mit

System.GC.Collect();

den Garbage Collector zu zwingen, aufzuräumen. Vielleicht wird Dein Destruktor ja dann aufgerufen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Fingolfin

Registriert seit: 8. Okt 2003
62 Beiträge
 
#7

Re: Interfaces in DotNet ganz anders?

  Alt 1. Dez 2004, 21:14
Zitat von mirage228:
Du könntest versuchen mit

System.GC.Collect();

den Garbage Collector zu zwingen, aufzuräumen. Vielleicht wird Dein Destruktor ja dann aufgerufen.
Danke für den Tipp, aber da regt sich auch nichts. Hier scheint was sehr grundlegend anders als bei Win32 zu laufen. Und ich dachte DotNet mal 2-3 Stunden angucken und gut.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Interfaces in DotNet ganz anders?

  Alt 2. Dez 2004, 06:57
Zitat von Fingolfin:
Zitat von mirage228:
Du könntest versuchen mit

System.GC.Collect();

den Garbage Collector zu zwingen, aufzuräumen. Vielleicht wird Dein Destruktor ja dann aufgerufen.
Danke für den Tipp, aber da regt sich auch nichts. Hier scheint was sehr grundlegend anders als bei Win32 zu laufen. Und ich dachte DotNet mal 2-3 Stunden angucken und gut.
Hi,

habe gleich noch einen

Habe ich in einem anderen Thread gefunden:
GC.WaitforPendingFinalizers(); mit dem Kommentar "wenn es ganz haarig wird"

Vielleicht hilft Dir das ja.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
merlin17

Registriert seit: 15. Dez 2002
Ort: Mittelfranken
980 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: Interfaces in DotNet ganz anders?

  Alt 2. Dez 2004, 09:04
Hallo,

Zitat:
Hier scheint was sehr grundlegend anders als bei Win32 zu laufen. Und ich dachte DotNet mal 2-3 Stunden angucken und gut. Wink
DER war richtig gut, da fängt der Arbeitstag mit einem richtigen Schmunzeln an

Ich habe das erstemal am 17.05.2001 (musste ich im Regal jetzt ganz schnell suchen) mit .net zu tun gehabt und schon dort war klar:
mit den .net E-Businesslösungen (so hies damals das 1st-Training) ist alles neu.... ohne Altlasten....



thomas


Sorry, normal bin ich nicht so schnell OT, aber hier kann ich es mir nicht verkneifen....
- TeamNevrona cannot respond to questions received via email -
http://rave-notes.blogspot.com
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#10

Re: Interfaces in DotNet ganz anders?

  Alt 2. Dez 2004, 18:00
Ich habe mal ein erstes Tutorial zu diesem Thema verfasst: Der .NET Garbage Collector

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12: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