pascalabcnet/PABCNetHelp/LangGuide/Classes/indexedproperties.html

90 lines
3.9 KiB
HTML

<html>
<head>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="property">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css">
</head>
<body>
<H1>Èíäåêñíûå ñâîéñòâà</H1>
<p>Èíäåêñíûå ñâîéñòâà âåäóò ñåáÿ àíàëîãè÷íî ïîëÿì-ìàññèâàì è
èñïîëüçóþòñÿ, êàê ïðàâèëî, äëÿ äîñòóïà ê ýëåìåíòàì êîíòåéíåðîâ.
Êàê è ïðè èñïîëüçîâàíèè îáû÷íûõ ñâîéñòâ, ïðè èñïîëüçîâàíèè èíäåêñíûõ ñâîéñòâ
ìîãóò ïîïóòíî âûïîëíÿòüñÿ íåêîòîðûå äåéñòâèÿ.
</p>
<p>Èíäåêñíîå ñâîéñòâî îïèñûâàåòñÿ â êëàññå ñëåäóþùèì
îáðàçîì:</p>
<blockquote>
<p><code><b>property</b> Prop[<code class="codeit">îïèñàíèå èíäåêñîâ</code>]: <code class="codeit">òèï</code> <b>read</b>
<code class="codeit">èìÿ ôóíêöèè ÷òåíèÿ</code> <b>
write</b> <code class="codeit">èìÿ ïðîöåäóðû çàïèñè</code>;</code></p>
</blockquote>
<p> ïðîñòåéøåì ñëó÷àå îäíîãî èíäåêñà îïèñàíèå èíäåêñíîãî ñâîéñòâà âûãëÿäèò òàê:</p>
<blockquote>
<p><code><b>property</b> Prop[ind: <code class="codeit">
òèï èíäåêñà</code>]: <code class="codeit">òèï</code> <b>read</b>
<code class="codeit">èìÿ ôóíêöèè ÷òåíèÿ</code> <b>
write</b> <code class="codeit">èìÿ ïðîöåäóðû çàïèñè</code>;</code></p>
</blockquote>
<p> ýòîì ñëó÷àå ôóíêöèÿ ÷òåíèÿ è
ïðîöåäóðà çàïèñè äîëæíû áûòü ìåòîäàìè ýòîãî êëàññà è èìåòü ñëåäóþùèé âèä:</p>
<blockquote>
<p><code><b>function</b> GetProp(ind: <code class="codeit">
òèï èíäåêñà</code>): <code class="codeit">
òèï</code>;<b><br>
procedure</b> SetProp(ind: <code class="codeit">òèï èíäåêñà</code>; v: <code class="codeit">òèï</code>);</code></p>
</blockquote>
<p>Âñÿêèé ðàç, êîãäà ìû äëÿ îáúåêòà <code>a</code>, ñîäåðæàùåãî ñâîéñòâî <code>
Prop</code>, âûïîëíÿåì ïðèñâàèâàíèå <code>a.Prop[ind] := value</code>,
âûçûâàåòñÿ ïðîöåäóðà <code>SetProp(ind,value)</code>, à
êîãäà ñ÷èòûâàåì çíà÷åíèå
<code>a.Prop[ind]</code>, âûçûâàåòñÿ ôóíêöèÿ
<code>GetProp(ind)</code>.</p>
<p>Èíäåêñíîå ñâîéñòâî, ïîñëå êîòîðîãî äîáàâëåíî êëþ÷åâîå ñëîâî <b><code>default</code></b> ñ ïîñëåäóþùåé <code>;</code>, íàçûâàåòñÿ <i><b><font color="#FF0000">èí</font></b><font color="#FF0000"><b>äåêñíûì
ñâîéñòâîì ïî óìîë÷àíèþ</b></font></i> è ïîçâîëÿåò ïîëüçîâàòüñÿ îáúåêòàìè êëàññà êàê ìàññèâàìè, ò.å.
èñïîëüçîâàòü çàïèñü <code>a[ind]</code> <i>âìåñòî </i> <code>a.Prop[ind]</code>. </p>
<p>Ïðèíöèïèàëüíîå îòëè÷èå èíäåêñíûõ ñâîéñòâ îò ïîëåé-ìàññèâîâ
ñîñòîèò â òîì, ÷òî òèï èíäåêñà ìîæåò áûòü ïðîèçâîëüíûì (â ÷àñòíîñòè, ñòðîêîâûì).&nbsp;Ýòî
ïîçâîëÿåò ëåãêî ðåàëèçîâàòü òàê íàçûâàåìûå àññîöèàòèâíûå ìàññèâû, ýëåìåíòû
êîòîðûõ èíäåêñèðóþòñÿ ñòðîêàìè. </p>
<p>Â ñëåäóþùåì ïðèìåðå èíäåêñíîå ñâîéñòâî èñïîëüçóåòñÿ äëÿ çàêðàøèâàíèÿ/ñòèðàíèÿ
êëåòîê øàõìàòíîé äîñêè â ãðàôè÷åñêîì ðåæèìå.</p>
<blockquote>
<p><code><b>uses</b> GraphABC;<br>
<b>const</b> <br>
&nbsp; n = 8;<br>
&nbsp; sz = 50;<br>
<b>type</b> ChessBoard = <b>class</b><br>
<b>private</b><br>
&nbsp; a: <b>array</b> [1..n,1..n] <b>of</b> boolean;<br>
&nbsp; <b>procedure</b> setCell(x,y: integer; value: boolean);<br>
&nbsp; <b>begin</b><br>
&nbsp;&nbsp;&nbsp; <b>if</b> value <b>then</b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Brush.Color := clWhite<br>
&nbsp;&nbsp;&nbsp; <b>else</b> Brush.Color := clBlack;<br>
&nbsp;&nbsp;&nbsp; Fillrect((x-1)*sz+1,(y-1)*sz+1,x*sz,y*sz);<br>
&nbsp;&nbsp;&nbsp; a[x,y] := value;<br>
&nbsp; <b>end</b>;<br>
&nbsp; <b>function</b> getCell(x,y: integer): boolean;<br>
&nbsp; <b>begin</b><br>
&nbsp;&nbsp;&nbsp; Result := a[x,y];<br>
&nbsp; <b>end</b>;<br>
<b>public</b><br>
&nbsp; <b>property</b> Cells[x,y: integer]: boolean <b>read</b> getCell <b>write</b>
setCell; <b>default</b>;<br>
<b>end</b>;</code></p>
<p><code><b>var</b> c: ChessBoard := new ChessBoard;</code></p>
<p><code><b>begin</b><br>
&nbsp; var x,y: integer;<br>
&nbsp; <b>for</b> x:=1 <b>to</b> n <b>do</b><br>
&nbsp; <b>for</b> y:=1 <b>to</b> n <b>do</b><br>
&nbsp;&nbsp;&nbsp; c[x,y] := Odd(x+y); <br>
<b>end</b>.</code></p>
</blockquote>
</body>
</html>