Thread View: pl.comp.lang.pascal
2 messages
2 total messages
Started by webmajsterek
Thu, 13 Dec 2007 11:15
properyty na dynamicznej tablicy
Author: webmajsterek
Date: Thu, 13 Dec 2007 11:15
Date: Thu, 13 Dec 2007 11:15
18 lines
1352 bytes
1352 bytes
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;
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 ??
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: properyty na dynamicznej tablicy
Author: Ł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/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads