2018-08-02 22:04:49 +03:00
|
|
|
|
<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>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<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>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>a <b>is</b> </code><i>ClassType</i></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<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>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>a <b>as</b> </code><i>ClassType</i></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>и возвращает ссылку на объект типа
|
|
|
|
|
|
<i>ClassType</i> если преобразование возможно, в
|
|
|
|
|
|
противном случае возвращает <code><b>nil</b></code>.</p>
|
|
|
|
|
|
<p>Например, в программе</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code><b>type</b> <br>
|
|
|
|
|
|
Base = <b>class</b> <b><br>
|
|
|
|
|
|
end</b>;<br>
|
|
|
|
|
|
Derived = <b>class</b>(Base) <b><br>
|
|
|
|
|
|
procedure</b> p;<b><br>
|
|
|
|
|
|
begin<br>
|
|
|
|
|
|
end</b>;<b><br>
|
|
|
|
|
|
end</b>;</code></p>
|
|
|
|
|
|
<p><code><b>var</b> b: Base;</code></p>
|
|
|
|
|
|
<p><code><b>begin</b><br>
|
|
|
|
|
|
b := new Base;<br>
|
2025-11-11 22:04:03 +03:00
|
|
|
|
Println(b <b>i</b><b>s</b> Derived);<br>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
b := new Derived;<br>
|
2025-11-11 22:04:03 +03:00
|
|
|
|
Println(b <b>i</b><b>s</b> Derived);<br>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<b>end</b>. </code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<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>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code><b>if</b> b <b>is</b> Derived then <br>
|
|
|
|
|
|
Derived(b).p;</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p><b>2 способ.</b></p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code><b>var</b> d: Derived := b <b>as</b> Derived;<br>
|
|
|
|
|
|
d.p;</code></p>
|
|
|
|
|
|
</blockquote>
|
|
|
|
|
|
|
|
|
|
|
|
</body></html>
|