pascalabcnet/PABCNetHelp/LangGuide/Operations_Expressions/isasop.html

73 lines
2.6 KiB
HTML

<html><head>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="is">
<param name="Keyword" value="as">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css"></head>
<body><H1>Îïåðàöèè is è as</H1>
<p>Îïåðàöèÿ <code><b>is</b></code> ïðåäíàçíà÷åíà äëÿ ïðîâåðêè òîãî, èìååò ëè
êëàññîâàÿ ïåðåìåííàÿ óêàçàííûé äèíàìè÷åñêèé òèï.
Îïåðàöèÿ <code><b>as</b></code> ïîçâîëÿåò áåçîïàñíî ïðåîáðàçîâàòü ïåðåìåííóþ
îäíîãî êëàññîâîãî òèïà ê äðóãîìó êëàññîâîìó òèïó (â îòëè÷èå îò
<a href="../Classes/classcast.html">ÿâíîãî ïðèâåäåíèÿ êëàññîâîãî òèïà</a>).</p>
<p>Îïåðàöèÿ
<code><b>is</b></code> èìååò âèä:</p>
<blockquote>
<p><code>a <b>is</b> </code><i>ClassType</i></p>
</blockquote>
<p>è âîçâðàùàåò <code>True</code> åñëè
<code>a</code> ïðèíàäëåæèò ê êëàññó <i>ClassType</i>
èëè îäíîìó èç åãî ïîòîìêîâ. </p>
<p>Íàïðèìåð, åñëè <code>Base</code>
è <code>Derived</code> - êëàññû, ïðè÷åì,
<code>Derived</code> - ïîòîìîê <code>Base</code>,
ïåðåìåííûå b è d èìåþò ñîîòâåòñòâåííî òèïû <code>Base</code>
è <code>Derived</code>, òî âûðàæåíèÿ
<code>b <b>is</b> Base</code> è <code>d <b>is</b>
Base</code> âîçâðàùàþò <code>True</code>,
à <code>b <b>is</b> Derived</code> - <code>False</code>.</p>
<p>Îïåðàöèÿ
<code><b>as</b></code> èìååò âèä:</p>
<blockquote>
<p><code>a <b>as</b> </code><i>ClassType</i></p>
</blockquote>
<p>è âîçâðàùàåò ññûëêó íà îáúåêò òèïà
<i>ClassType</i> åñëè ïðåîáðàçîâàíèå âîçìîæíî, â
ïðîòèâíîì ñëó÷àå âîçâðàùàåò <code><b>nil</b></code>.</p>
<p>Íàïðèìåð, â ïðîãðàììå</p>
<blockquote>
<p><code><b>type</b> <br>
&nbsp; Base = <b>class</b> <b><br>
&nbsp; end</b>;<br>
&nbsp; Derived = <b>class</b>(Base) <b><br>
&nbsp;&nbsp;&nbsp; procedure</b> p;<b><br>
&nbsp;&nbsp;&nbsp; begin<br>
&nbsp;&nbsp;&nbsp; end</b>;<b><br>
&nbsp; end</b>;</code></p>
<p><code><b>var</b> b: Base;</code></p>
<p><code><b>begin</b><br>
&nbsp; b := new Base;<br>
&nbsp; writeln(b <b>i</b><b>s</b> Derived);<br>
&nbsp; b := new Derived;<br>
&nbsp; writeln(b <b>i</b><b>s</b> Derived);<br>
<b>end</b>. </code></p>
</blockquote>
<p>ïåðâûé ðàç âûâîäèòñÿ <code>False</code>,
âòîðîé - <code>True</code>.</p>
<p>Îïåðàöèè <code><b>is</b></code> è
<code><b>as</b></code> èñïîëüçóþòñÿ äëÿ ðàáîòû ñ
ïåðåìåííîé áàçîâîãî êëàññà, ñîäåðæàùåé îáúåêò ïðîèçâîäíîãî êëàññà.</p>
<p><b>1 ñïîñîá.</b></p>
<blockquote>
<p><code><b>if</b> b <b>is</b> Derived then <br>
&nbsp; Derived(b).p;</code></p>
</blockquote>
<p><b>2 ñïîñîá.</b></p>
<blockquote>
<p><code><b>var</b> d: Derived := b <b>as</b> Derived;<br>
d.p;</code></p>
</blockquote>
</body></html>