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>
|
|
|
|
|
|
|
|
|
|
|
|
<body>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<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>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
B</code>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
возвращает <code>True</code> если переменная <code>a1</code> имеет динамический
|
|
|
|
|
|
тип, совпадающий с B или являющийся одним из его потомков, и <code>False</code> в противном случае. Например:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code><b>type</b> <br>
|
|
|
|
|
|
A =<b> class<br>
|
|
|
|
|
|
end;</b><br>
|
|
|
|
|
|
B =<b> class</b>(A)<b><br>
|
|
|
|
|
|
end;<br>
|
|
|
|
|
|
var </b>a1: A;<br>
|
|
|
|
|
|
...<br>
|
|
|
|
|
|
a1 := B.Create;<br>
|
2025-11-11 22:04:03 +03:00
|
|
|
|
Println(a1 <b>is</b> B); // True</code></p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>Если <code>a1</code> - переменная
|
|
|
|
|
|
классового типа, а <code>B</code> - тип класса, то выражение <code>a1 <b>as</b>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
B</code>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
возвращает объект класса <code>B</code>, <code>a1</code> имеет динамический тип
|
|
|
|
|
|
<code>B</code> или производный от него и <b><code>nil</code></b> в противном
|
|
|
|
|
|
случае. Например:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code><b>var</b> b1: B;<br>
|
|
|
|
|
|
...<br>
|
|
|
|
|
|
b1 := a1 <b>as</b> B;</code><br>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
Фактически последняя строка делает то же, что и следующий фрагмент кода:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code><b>if</b> a1 <b>is</b> B <b>then</b><br> b1 := B(a1)<br><b>else</b> b1 :=<b> nil</b>;</code></p>
|
|
|
|
|
|
</blockquote>
|
|
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
|
|
|
|
|
|
|
</html>
|