93 lines
4.9 KiB
HTML
93 lines
4.9 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||
<param name="Keyword" value="constructor">
|
||
<param name="Keyword" value="destructor">
|
||
<param name="Keyword" value="Create">
|
||
<param name="Keyword" value="Destroy">
|
||
<param name="Keyword" value="Конструктор">
|
||
<param name="Keyword" value="Деструктор">
|
||
</object>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||
<title></title>
|
||
<link rel="StyleSheet" href="../../default.css">
|
||
</head>
|
||
|
||
<body>
|
||
<H1>Конструктор<span lang="ru">ы</span> </H1>
|
||
<p>Объекты создаются с помощью специальных
|
||
методов, называемых <b><font color="#FF0000"> <i>конструкторами</i></font></b>. </p>
|
||
<p>Конструктор представляет собой функцию, создающую объект в
|
||
динамической памяти, инициализирующую его поля и возвращающую ссылку на
|
||
созданный объект. Эта ссылка обычно сразу присваивается переменной
|
||
типа класс. При описании конструктора вместо ключевого слова <code><b>
|
||
function</b></code> используется ключевое слово <code>
|
||
<b>constructor</b></code>. Кроме того, для конструктора не
|
||
указывается тип возвращаемого значения. </p>
|
||
<p>Например:</p>
|
||
<blockquote>
|
||
<p><code><b>type</b> <br>
|
||
Person =<b> class<br>
|
||
private</b><br>
|
||
nm: <b>string</b>;<br>
|
||
ag: integer;<br>
|
||
<b> public</b><br>
|
||
<b>constructor</b> Create(name: <b>
|
||
string</b>; age: integer);<br>
|
||
<b>end</b>;<br>
|
||
...<br>
|
||
<b>constructor</b> Person.Create(name: <b>
|
||
string</b>; age: integer);<br>
|
||
<b>begin</b><br>
|
||
nm := name;<br>
|
||
ag := age;<br>
|
||
<b>end</b>;</code></p>
|
||
</blockquote>
|
||
<p>В <b>PascalABC.NET</b> конструктор
|
||
всегда должен иметь имя <code>Create</code>. При описании
|
||
конструктора внутри класса можно опускать его имя:</p>
|
||
<blockquote>
|
||
<p><code><b>type</b> <br> Person =<b> class<br></b>
|
||
<b>constructor</b> (name: <b>string</b>; age: integer);<br><b>
|
||
begin</b><br>
|
||
nm := name;<br>
|
||
ag := age;<br>
|
||
<b> end</b>;<br>
|
||
<b>end</b>;</code></p>
|
||
</blockquote>
|
||
<p><span lang="ru">В силу особенностей реализации вызовов конструкторов в </span>
|
||
.NET <span lang="ru">в </span><b>PascalABC.NET</b> <span lang="ru">всегда
|
||
создается конструктор без параметров (независимо от того, определен ли другой
|
||
конструктор). Этот конструктор инициализирует все поля нулевыми значениями
|
||
(строковые поля - пустыми строками, логические - значением </span>False)<span lang="ru">.</span></p>
|
||
<p>Для вызова конструктора можно использовать два способа.</p>
|
||
<p><b>1 способ.</b> В стиле Object Pascal.</p>
|
||
<p>Для вызова конструктора следует указать имя класса, за которым следует
|
||
точка-разделитель, имя конструктора и список параметров. Например:</p>
|
||
<blockquote>
|
||
<p><code><b>var</b> p: Person;<br>
|
||
p := Person.Create('Иванов',20);</code></p>
|
||
</blockquote>
|
||
<p><b>2</b><b> способ.</b> С помощью операции <code>new</code> - в
|
||
стиле C# (предпочтительный).</p>
|
||
<blockquote>
|
||
<p><code><b>var</b> p: Person;<br>
|
||
p := new Person('Иванов',20);</code></p>
|
||
</blockquote>
|
||
<p>Деструктор в Object Pascal -
|
||
специальная процедура, уничтожающая объект и
|
||
освобождающая динамическую память, которую этот объект
|
||
занимал. При описании деструктора вместо служебного слова <b><code>procedure</code></b>
|
||
используется служебное слово <code><b>destructor</b></code>.</p>
|
||
<p>Например:</p>
|
||
<blockquote>
|
||
<p><code><b>destructor</b> Destroy;<br><b>begin</b><br> ...<br><b>end</b>;</code></p>
|
||
</blockquote>
|
||
<p>Поскольку в <b>PascalABC.NET</b>
|
||
память управляется сборщиком мусора, деструктор в <b>PascalABC.NET</b>
|
||
не играет никакой роли и представляет собой обычную
|
||
процедуру-метод.</p>
|
||
</body>
|
||
|
||
</html> |