🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #334777

Re: Jak przechowywać Interfejsy?

#334777
From: wloochacz
Date: Thu, 12 Jan 2012 10:37
59 lines
2865 bytes
W dniu 2012-01-12 11:00, konsul41@wp.pl pisze:
> Delphi XE
>
> Robię coś w rodzaju rozszeżenia możliwości
To jest tzw. Interface Proxy
http://en.wikipedia.org/wiki/Proxy_pattern

> type
> IObiekt = interface;
>
> //interfejs przechowujący zarejestrowane kontrolki - lista
> zarejestrowanych kontolek
> IListaObiektow = interface
> function GetIObiekt(index : Integer): IObiekt;
> function FindIObiekt(GUID : TGUID): IObiekt; overload;
> function FindIObiekt(GUID : String): IObiekt; overload;
> function AddIObiekt(obiekt : IObiekt):boolean;
> procedure DeleteIObiekt(GUID : TGUID); overload;
> procedure DeleteIObiekt(GUID : String); overload;
> property Interfejs[index : Integer]: IObiekt read GetIObiekt;
> end;
>
>
> //Interfejs podstawowy dla wszystkich obiektów kontrolek
> IObiekt = interface
> ['{B53C6B06-9968-4170-8A2C-977A4ABEF423}']
> function GetLeft(): Integer;
> ...
> property Typ : String read GetTyp write SetTyp;
> end;
>
>
>
> TListaObiektow= class(TComponent,IListaObiektow)
Dlaczego TComponent a nie TIntefeacedObject lub TPersistentInterfaced?
Nie będziesz miał tu RefCountingu i wycieki...
No chyba, ze sam se zaimplementujesz RefCounting.

>
> private
> Interfejsy : array of IObiekt;
> public
> constructor Create(AOwner: TComponent); Override;
> function GetIObiekt(index : Integer): IObiekt;
> function FindIObiekt(GUID : TGUID): IObiekt; overload;
> function FindIObiekt(GUID : String): IObiekt; overload;
> function AddIObiekt(obiekt : IObiekt):boolean;
> procedure DeleteIObiekt(GUID : TGUID); overload;
> procedure DeleteIObiekt(GUID : String); overload;
> end;

> Pytanie czy w ten sposób można przechowywać interfejsy?
Można, ale po co komplikować?
http://stackoverflow.com/questions/2959163/how-to-store-and-locate-multiple-interface-types-within-a-delphi-tinterfacelist

A jak masz generyki pod ręką to można skorzystać np. z TDictionary...

-- 
wloochacz
Technical Details
Message-ID: <jemd56$lt5$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <4f0eaf3a$0$1258$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: wloochacz <wloochacz@nospam.nie.gmail.com>
Newsgroups: pl.comp.lang.delphi
Subject: Re: Jak przechowywać Interfejsy?
Date: Thu, 12 Jan 2012 11:37:18 +0100
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 59
Message-ID: <jemd56$lt5$1@inews.gazeta.pl>
References: <4f0eaf3a$0$1258$65785112@news.neostrada.pl>
NNTP-Posting-Host: mainframe.rene.com.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1326364646 22437 193.239.124.200 (12 Jan 2012 10:37:26 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Thu, 12 Jan 2012 10:37:26 +0000 (UTC)
X-User: wloochacz
In-Reply-To: <4f0eaf3a$0$1258$65785112@news.neostrada.pl>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0) Gecko/20111222 Thunderbird/9.0.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit