pascalabcnet/PABCNetHelp/LangGuide/Classes/constrdestr.html

93 lines
4.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>
&nbsp; Person =<b> class<br>
&nbsp; private</b><br>
&nbsp;&nbsp;&nbsp; nm: <b>string</b>;<br>
&nbsp;&nbsp;&nbsp; ag: integer;<br>
<b>&nbsp; public</b><br>
&nbsp;&nbsp;&nbsp; <b>constructor</b> Create(name: <b>
string</b>; age: integer);<br>
&nbsp; <b>end</b>;<br>
...<br>
<b>constructor</b> Person.Create(name: <b>
string</b>; age: integer);<br>
<b>begin</b><br>
&nbsp; nm := name;<br>
&nbsp; 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>&nbsp; Person =<b> class<br></b>&nbsp;&nbsp;&nbsp;
<b>constructor</b> (name: <b>string</b>; age: integer);<br><b>
&nbsp;&nbsp;&nbsp; begin</b><br>
&nbsp;&nbsp;&nbsp; &nbsp; nm := name;<br>
&nbsp;&nbsp;&nbsp; &nbsp; ag := age;<br>
<b>&nbsp;&nbsp;&nbsp; end</b>;<br>
&nbsp; <b>end</b>;</code></p>
</blockquote>
<p><span lang="ru">В силу особенностей реализации вызовов конструкторов в </span>
.NET <span lang="ru">в </span><b>PascalABC.NET</b> <span lang="ru">всегда
создается конструктор без параметров (независимо от того, определен ли другой
конструктор). Этот конструктор инициализирует все поля нулевыми значениями
(строковые поля - пустыми строками, логические&nbsp; - значением </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>&nbsp; ...<br><b>end</b>;</code></p>
</blockquote>
<p>Поскольку в <b>PascalABC.NET</b>
память управляется сборщиком мусора, деструктор в <b>PascalABC.NET</b>
не играет никакой роли и представляет собой обычную
процедуру-метод.</p>
</body>
</html>