Article View: pl.comp.lang.pascal
Article #92320Re: properyty na dynamicznej tablicy
From: Łukasz 'Maly' Ostrowski
Date: Thu, 13 Dec 2007 11:58
Date: Thu, 13 Dec 2007 11:58
67 lines
2723 bytes
2723 bytes
webmajsterek@poczta.onet.pl wrote:
> mam taki np obiekt
>
> type
> Test=class
> private
> B : Array of Byte;
> properyty Data[APos:Word]:Byte read B;
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> i tu nie wiem jak zdefiniowac dynamiczna tablice jako tylko do odczytu
> end;
Najpierw snip:
type
TDynByteArray = array of byte;
TTest =
class
private
B : TDynByteArray;
function GetB(APos:longint):Byte; // ****
public
property Data[APos:longint]:Byte read GetB;
property Data2 : TDynByteArray read B;
end;
function TTest.getB(APos:Longint):Byte;
begin
Result:=B[APos];
end;
procedure blah(test:TTest);
begin
SetLength(test.B, 123);
test.B[10]:=123; // *
end;
var
test : TTest;
begin
test := TTest.Create;
blah(test);
Writeln(test.Data[10]);
SetLength(test.Data2, 1337); // **
test.Data2[123] := 123; // ***
end.
> chce ochronic pola przd modyfikacja ( nawet z wnetrza unitu ) - ale
> nie chce angazowac w to ddoatkowej procedury ( typu getPole ) i
> odstawiania jej w properyty -- jest to mozliwe ??
1. W obrębie jednostki kompilacji wszystko jest "public", w Object
Pascalu jest tak w przeciwieństwie do większości języków, z racji
braku "przyjaźni" klas. Więc, w obrębie pojedynczego unitu możesz
sobie o enkapsulacji najwyżej pomarzyć. Patrz - fragment
oznaczony (*).
2. Musisz zrobić proxy metode, patrz (****).Inaczej tego nie zrobisz,
a jeżeli wystawisz całego dynamicznego arraya to kompletnie
tracisz enkapsulacje/ochrone tego pola. Patrz (***). I do
tego nie tylko zawartości, ale też stanu tegoż arraya, patrz (**).
--
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://maly.nemo.pl/
Technical Details
Message-ID:
<fjr6tm$4ok$1@news.dialog.net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mailReferences:
<4047.0000007a.4761143e@newsgate.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail From: Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> Newsgroups: pl.comp.lang.pascal Subject: Re: properyty na dynamicznej tablicy Date: Thu, 13 Dec 2007 12:58:37 +0100 Organization: Dialog Net Lines: 68 Message-ID: <fjr6tm$4ok$1@news.dialog.net.pl> References: <4047.0000007a.4761143e@newsgate.onet.pl> NNTP-Posting-Host: xdsl-2911.zgora.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1197547254 4884 81.168.239.95 (13 Dec 2007 12:00:54 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Thu, 13 Dec 2007 12:00:54 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.3138 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit