Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Prism ObjectListe in .Net? (https://www.delphipraxis.net/49815-objectliste-net.html)

Master_BB 16. Jul 2005 10:59


ObjectListe in .Net?
 
Hya,
ich wollte gerade mal ein Object von einer objectliste ableiten und da hab ich in der
Hilfe gesehen das es die ObjectList und die normale List nur
in System.Web.Mobile gibt bzw ASP.NET Mobile Controls.
Kann ich solche Objecte verwenden auch wenn meine applikation
nur fürs ausführen wie eine normale anwendung bestimmt ist, sprich keine onlineapplikation?
bzw wenn ich das nicht nehmen kann/darf was nehm ich sonst?
muss ich mir noch selber sowas schreiben? sowas gehört ja eigentlcih zu
den grundwerkzeugen

Greetz

jbg 16. Jul 2005 11:08

Re: ObjectListe in .Net?
 
Du hast da wohl die Hilfe auf das .NET Framework eingeschränkt.

Schon mal Borland.Vcl.Classes bzw. Borland.Vcl.Contnrs eingebungen? Damit hättest du die Listen wieder.
Das .NET Framework bietet aber auch selbst Listen an: Wie die Klasse System.Collections.ArrayList.

Und eine "normale" TList ala Win32 wirst du nicht mehr finden, da die Borland.Vcl.Classes.TList nun auch TObject als Datentyp hat statt wie bisher Pointer.
TObjectList hat im Vergleich zu ArrayList oder TList aber den Vorteil, dass es die Methode Dispose() der enthaltenen Objekte aufruft und somit eine deterministische Freigabe der Objekte erlaubt.

Robert_G 16. Jul 2005 11:24

Re: ObjectListe in .Net?
 
Ich glaube die ArrayList ist die passendste entsprechung für eine TObjectList.

@jbg Wenn ein container aus dem Scope rennt werden ja auch alle enthaltenen Instanzen von der GC erfasst.
eine strong typed Liste on IDisposable Items könnte mit minimalem Aufwand (zumindest in .Net 2.0 ;) ) das gleiche:
Delphi-Quellcode:
uses
   System.Collections.Generic;

type
   DisposableList = public class(List<IDisposable>, IDisposable)
   public
      procedure Dispose;virtual;
end;

implementation

procedure DisposableList.Dispose;
var
   Item : IDisposable;
begin
   for Item in self do
      Item.Dispose();
end;

jbg 16. Jul 2005 12:22

Re: ObjectListe in .Net?
 
Zitat:

Zitat von Robert_G
Wenn ein container aus dem Scope rennt werden ja auch alle enthaltenen Instanzen von der GC erfasst.

Nur ruft das nicht automatisch Dispose auf, sondern irgendwann mal Finalize. Und wenn man in Finalize nun nicht dafür sorgt, dass Dispose aufgerufen wird, hat man eben keine deterministrische Freigabe der Objekte.

Zitat:

zumindest in .Net 2.0
Im Moment gehe ich bei Fragen immer von .NET 1.1 aus, denn das ist bis jetzt immernoch am weitesten verbreitet und Delphi.NET kann nur dies. Und wir sind hier in einem Delphi-Forum und nicht in einem Chrome-Forum, weswegen ich da wohl automatisch auf .NET 1.1 schließe, dass keine Generics kennt.

Robert_G 16. Jul 2005 12:44

Re: ObjectListe in .Net?
 
Zitat:

Zitat von jbg
Zitat:

zumindest in .Net 2.0
Im Moment gehe ich bei Fragen immer von .NET 1.1 aus, denn das ist bis jetzt immernoch am weitesten verbreitet und Delphi.NET kann nur dies. Und wir sind hier in einem Delphi-Forum und nicht in einem Chrome-Forum, weswegen ich da wohl automatisch auf .NET 1.1 schließe, dass keine Generics kennt.

Ich hätte keine Lust gehabt einen kompletten CollectionBase-Wrapper/ArrayList-Descendant zu posten.
Ich denke, es sollte hier möglich sein, anhand des Schnipsel eine eigene strongtyped collection zu bauen, die Dispose aufruft.
Da es nur um den letzten Teil ging...

Master_BB 16. Jul 2005 18:34

Re: ObjectListe in .Net?
 
@ jbg
ich möchte keine Borland Routinen in meinen .NET Projekten verwenden da man dann
nichtmehr 100% auf dem Framework arbeitet. Und ich möchte 100% Systemunabhänigkeit,
benutze nur die WinForms und eigene davon abgeleitete Komponenten usw.

also werd ich mir meine eigene objectlist bauen. oki vielen dank für eure hinweise.

Robert_G 16. Jul 2005 18:41

Re: ObjectListe in .Net?
 
Wie ich bereits schrieb: ArrayList düfte ein guter Ersatz für die TObjectList sein.
Solange du keine unmanaged Resources mit dir rumschleppst oder sonstiges Disposing deiner Items benötigst, wäre es wohl immer besser auf die GC zu vertrauen.
Wenn Andreas' Einwand für dich gilt musst du halt nur das Dispose implementieren bzw. eine eigene Ableitung von CollectionBase bauens wenn du sichergehen willst, dass nur IDispoables in die Liste dürfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 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