pascalabcnet/PABCNetHelp/LangGuide/Classes/isas.html

55 lines
2 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><b>// Ñòàðûé òåêñò</b></p>
<p>Îïåðàöèÿ <code><b>is</b></code> ïðåäíàçíà÷åíà äëÿ ïðîâåðêè òîãî, èìååò ëè
êëàññîâàÿ ïåðåìåííàÿ óêàçàííûé <a href="virtual.html">äèíàìè÷åñêèé òèï</a>.
Îïåðàöèÿ <code><b>as</b></code> ïîçâîëÿåò áåçîïàñíî ïðåîáðàçîâàòü ïåðåìåííóþ
îäíîãî êëàññîâîãî òèïà ê äðóãîìó êëàññîâîìó òèïó (â îòëè÷èå îò
<a href="classcast.html#ClassCast">ÿâíîãî ïðèâåäåíèÿ êëàññîâîãî òèïà</a>). </p>
<p>Åñëè <code>a1</code> - ïåðåìåííàÿ
êëàññîâîãî òèïà, à <code>B</code> - òèï êëàññà, òî âûðàæåíèå <code>a1 <b>is</b>
B</code>
âîçâðàùàåò <code>True</code> åñëè ïåðåìåííàÿ <code>a1</code> èìååò äèíàìè÷åñêèé
òèï, ñîâïàäàþùèé ñ B èëè ÿâëÿþùèéñÿ îäíèì èç åãî ïîòîìêîâ, è <code>False</code> â ïðîòèâíîì ñëó÷àå. Íàïðèìåð:</p>
<blockquote>
<p><code><b>type</b> <br>
&nbsp; A =<b> class<br>
&nbsp; end;</b><br>
&nbsp; B =<b> class</b>(A)<b><br>
&nbsp; end;<br>
var </b>a1: A;<br>
...<br>
a1 := B.Create;<br>
writeln(a1 <b>is</b> B); // True</code></p>
</blockquote>
<p>Åñëè <code>a1</code> - ïåðåìåííàÿ
êëàññîâîãî òèïà, à <code>B</code> - òèï êëàññà, òî âûðàæåíèå <code>a1 <b>as</b>
B</code>
âîçâðàùàåò îáúåêò êëàññà <code>B</code>, <code>a1</code> èìååò äèíàìè÷åñêèé òèï
<code>B</code> èëè ïðîèçâîäíûé îò íåãî è <b><code>nil</code></b> â ïðîòèâíîì
ñëó÷àå. Íàïðèìåð:</p>
<blockquote>
<p><code><b>var</b> b1: B;<br>
...<br>
b1 := a1 <b>as</b> B;</code><br>
</blockquote>
Ôàêòè÷åñêè ïîñëåäíÿÿ ñòðîêà äåëàåò òî æå, ÷òî è ñëåäóþùèé ôðàãìåíò êîäà:</p>
<blockquote>
<p><code><b>if</b> a1 <b>is</b> B <b>then</b><br>&nbsp; b1 := B(a1)<br><b>else</b> b1 :=<b> nil</b>;</code></p>
</blockquote>
&nbsp;
</body>
</html>