🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #92320

Re: properyty na dynamicznej tablicy

#92320
From: Łukasz 'Maly' Ostrowski
Date: Thu, 13 Dec 2007 11:58
67 lines
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-mail
References: <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