pascalabcnet/PABCNetHelp/LangGuide/Classes/constrdestr.html

93 lines
4.9 KiB
HTML
Raw Normal View History

<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>