/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PABCNetHelp/LangGuide/Types/typecompatibility.html
117 строк
6 KB
samuraiGH
adding working-tree-encoding attribute (#3325)
07 ноя 2025, 16:12
Не верифицирован
07 ноя 2025, 16:12
cf1fd29
Код
Авторство
О чём код?
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title></title> <link rel="StyleSheet" href="../../default.css"> </head> <body> <OBJECT id=exam type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" style="position:absolute; top:-100; left:-100;"> <param name="Command" value="TCard"> <param name="Text" value=""> </OBJECT> <H1>Эквивалентность и совместимость типов</H1> <h2>Совпадение типов</h2> <p>Говорят, что типы <code>T1</code> и <code>T2</code> совпадают, если они имеют одно имя либо же определены в секции <code><b>type</b></code> в виде <code>T1</code> = <code>T2</code>. Таким образом, в описаниях</p> <blockquote> <p><code><b>type</b><br> IntArray = <b>array</b> [1..10] <b>of</b> integer;<br> IntArrayCopy = IntArray;<br> <b>var</b><br> a1: IntArray;<br> a2: IntArrayCopy;<br> b1,c1: <b>array</b> [1..15] <b>of</b> integer;<br> b2: <b>array</b> [1..15] <b>of</b> integer; </code></p> </blockquote> <p>переменные <code>a1</code> и <code>a2</code> и переменные <code>b1</code> и <code>c1</code> имеют один и тот же тип, а переменные <code>b1</code> и <code>b2</code> - разные типы. </p> <h2>Эквивалентность типов</h2> <p>Говорят, что типы <code>T1</code> и <code>T2</code> эквивалентны, если выполняется одно из следующих условий:</p> <ol> <li><code>T1</code> и <code>T2</code> совпадают</li> <li><code>T1</code> и <code>T2</code> - динамические массивы с совпадающими типами элементов</li> <li><code>T1</code> и <code>T2</code> - указатели с совпадающими базовыми типами</li> <li><code>T1</code> и <code>T2</code> - множества с совпадающими базовыми типами</li> <li><code>T1</code> и <code>T2</code> - процедурные типы с совпадающим списком формальных параметров (и типом возвращаемого значения - для функций)</li> </ol> <p>Если типы эквивалентны только если их имена совпадают, то говорят, что имеет место <font color="#FF0000"><b><i> именная эквивалентность типов</i></b></font>. Если типы эквивалентны если они совпадают по структуре, то говорят, что имеет место <font color="#FF0000"><b><i>структурная эквивалентность типов</i></b></font>. Таким образом, в <b>PascalABC.NET</b> имеет место именная эквивалентность для всех типов, кроме динамических массивов, множеств, типизированных указателей и процедурных типов, для которых имеет место структурная эквивалентность типов.</p> <p>Только если типы <code>T1</code> и <code>T2</code> эквивалентны, фактический параметр типа <code>T1</code> может быть подставлен вместо формального параметра-переменной типа <code>T2</code>.</p> <h2>Совместимость типов </h2> <p>Говорят, что типы <code>T1</code> и <code>T2</code> совместимы, если выполняется одно из следующих условий:</p> <ol> <li><code>T1</code> и <code>T2</code> эквивалентны</li> <li><code>T1</code> и <code>T2</code> принадлежат к целым типам</li> <li><code>T1</code> и <code>T2</code> принадлежат к вещественным типам</li> <li>Один из типов - поддиапазон другого или оба - поддиапазоны некоторого типа</li> <li><code>T1</code> и <code>T2</code> - множества с совместимыми базовыми типами</li> </ol> <h2>Совместимость типов по присваиванию</h2> <p>Говорят, что значение типа <code>T2</code> можно присвоить переменной типа <code>T1</code> или тип <code>T2</code> совместим по присваиванию с типом <code>T1</code>, если выполняется одно из следующих условий:</p> <ol> <li><code>T1</code> и <code>T2</code> совместимы</li> <li><code>T1</code> - вещественного типа, <code>T2</code> - целого</li> <li><code>T1</code> - строкового типа, <code>T2</code> - символьного</li> <li><code>T1</code> - <code>pointer</code>, <code>T2</code> - типизированный указатель</li> <li><code>T1</code> - указатель или процедурная переменная, <code>T2=nil</code></li> <li><code>T1</code> - процедурная переменная, <code> T2</code> - имя процедуры или функции с соответствующим списком параметров</li> <li><code>T1</code>, <code>T2</code> - классовые типы, один из них - наследник другого. Поскольку в <b> PascalABC.NET</b> все типы кроме указателей являются потомками типа <code>Object</code>, то значение любого типа (кроме указателей) можно присвоить переменной типа <code> Object</code></li> <li><code>T1</code> - тип интерфейса, <code>T2</code> - тип класса, реализующего этот интерфейс </li> </ol> <p>Если тип <code>T2</code> совместим по присваиванию с типом <code>T1</code>, то говорят также, что тип <code>T2</code> <font color="#FF0000"><b><i> неявно приводится</i></b></font> к типу <code>T1</code>. </p> </body> </html>