pascalabcnet/PABCNetHelp/LangGuide/Classes/index_classes.html
Mikhalkovich Stanislav 6bf2f1cfa0 bug fix #1674
Indices как синоним Indexes
Print для строки как метод расширения
2019-02-01 15:04:07 +03:00

155 lines
6.5 KiB
HTML
Raw Permalink 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="class">
<param name="Keyword" value="sealed">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Êëàññû è îáúåêòû: îáçîð</title>
<link rel="StyleSheet" href="../../default.css">
<style type="text/css">
.auto-style1 {
font-family: monospace;
font-size: 10pt;
color: #000080;
}
</style>
</head>
<body>
<H1>Îáçîð êëàññîâ è îáúåêòîâ</H1>
<h2>Îïèñàíèå êëàññîâ</h2>
<p>Êëàññ ïðåäñòàâëÿåò ñîáîé ñîñòàâíîé òèï, ñîñòîÿùèé èç ïîëåé
(ïåðåìåííûõ), <A href="methods.html">ìåòîäîâ</A> (ïðîöåäóð è ôóíêöèé)
è <A href="properties.html">ñâîéñòâ</A>. Îïèñàíèå êëàññà èìååò âèä:</p>
<blockquote>
<p><code><b>type</b> <br>
&nbsp; <code class="codeit">èìÿ êëàññà</code><b> </b>=<b> class</b><br>
&nbsp; <code class="codeit">&nbsp; ñåêöèÿ1</code>&nbsp; <br>&nbsp;
<code class="codeit">&nbsp; ñåêöèÿ2</code>&nbsp; <br><code class="codeit">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
...</code><br>
&nbsp; <b>end</b>;</code></p>
</blockquote>
<p>Êàæäàÿ ñåêöèÿ èìååò âèä:</p>
<blockquote>
<p><code><code class="codeit"><A href="visibility.html">ìîäèôèêàòîð äîñòóïà</A></code>&nbsp;
<br><code class="codeit">&nbsp;&nbsp; îïèñàíèÿ ïîëåé</code><br>
<code class="codeit">&nbsp;&nbsp;
îáúÿâëåíèÿ èëè îïèñàíèÿ ìåòîäîâ è îïèñàíèÿ ñâîéñòâ</code></code></p>
</blockquote>
<p>Ìîäèôèêàòîð äîñòóïà â ïåðâîé ñåêöèè ìîæåò îòñóòñòâîâàòü, ïðè ýòîì
ïîäðàçóìåâàåòñÿ ìîäèôèêàòîð <strong><span class="auto-style1">internal</span></strong>
(âèäèìîñòü âñþäó âíóòðè ñáîðêè).</p>
<p>Ìåòîäû ìîãóò îïèñûâàòüñÿ êàê âíóòðè, òàê è âíå êëàññà. Ïðè îïèñàíèè ìåòîäà
âíóòðè êëàññà åãî èìÿ ïðåäâàðÿåòñÿ èìåíåì êëàññà ñ ïîñëåäóþùåé òî÷êîé. Íàïðèìåð:</p>
<blockquote>
<p><code><b>type</b><br>
&nbsp; Person = <strong>class</strong><b><br>
&nbsp; private</b><br>
&nbsp;&nbsp;&nbsp; fName: string;<br>
&nbsp;&nbsp;&nbsp; fAge: integer;<br>
<b>&nbsp; public</b><br>
&nbsp;&nbsp;&nbsp; <b>constructor</b> Create(Name: string; Age: integer);<br>
&nbsp;&nbsp;&nbsp; <b>begin</b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fName := Name;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fAge := Age;<br>
&nbsp;&nbsp;&nbsp; <b>end</b>;<br><strong>&nbsp;&nbsp;&nbsp; procedure</strong>
Print;<br><b>&nbsp;&nbsp;&nbsp; property</b> Name: string read fName;<br><b>&nbsp;&nbsp;&nbsp;
property</b> Age: integer read fAge;<b><br>&nbsp; end</b>;<br><strong><br>
procedure</strong> Person.Print;<br><strong>begin</strong><br>&nbsp;
Writeln($'Èìÿ: {Name} Âîçðàñò: {Age}');<br><strong>end</strong>;</code></p>
</blockquote>
<p>Ïîñëå ñëîâà <code><b>class</b></code>
â ñêîáêàõ ìîæåò áûòü óêàçàíî èìÿ êëàññà-ïðåäêà (ñì. <A href="inheritance.html">
Íàñëåäîâàíèå</A>), à òàêæå ÷åðåç çàïÿòóþ ñïèñîê ïîääåðæèâàåìûõ
<A href="../Interfaces/indexinterf.html">èíòåðôåéñîâ</A>. </p>
<p>Ïåðåä ñëîâîì <code><b>class</b></code>
ìîæåò áûòü óêàçàíî êëþ÷åâîå ñëîâî <code><b>sealed</b></code> â
ýòîì ñëó÷àå îò êëàññà çàïðåùåíî <A href="inheritance.html">íàñëåäîâàòü</A>.</p>
<p>Âñå îïèñàíèÿ è îáúÿâëåíèÿ âíóòðè êëàññà îáðàçóþò <b>
<font color="#ff0000"><i>òåëî êëàññà</i></font></b>. Ïîëÿ è
ìåòîäû îáðàçóþò <b><font color="#ff0000"> <i>èíòåðôåéñ</i></font></b> êëàññà. Èíèöèàëèçàòîðû ïîëåé îïèñàíû <A href="initfields.html">çäåñü</A>. </p>
<p>Êëàññû ìîãóò îïèñûâàòüñÿ òîëüêî íà ãëîáàëüíîì óðîâíå. Ëîêàëüíûå îïðåäåëåíèÿ êëàññîâ (ò.å. îïðåäåëåíèÿ â
ðàçäåëå îïèñàíèÿ ïîäïðîãðàìì) çàïðåùåíû.</p>
<h2>Ïåðåìåííûå òèïà êëàññ</h2>
<p>Â ÿçûêå <strong>PascalABC.NET</strong> êëàññû ÿâëÿþòñÿ
<A href="../Types/value_ref_types.html">ññûëî÷íûìè òèïàìè</A>.
Ýòî çíà÷èò, ÷òî ïåðåìåííàÿ òèïà êëàññ õðàíèò â äåéñòâèòåëüíîñòè ññûëêó íà
îáúåêò. </p>
<p>Ïåðåìåííûå òèïà êëàññ íàçûâàþòñÿ <b><font color="#ff0000"><i>îáúåêòàìè</i></font></b>
èëè <b><font color="#ff0000"><i>ýêçåìïëÿðàìè êëàññà</i></font></b>. Îíè
èíèöèàëèçèðóþòñÿ âûçîâîì <A href="constrdestr.html">êîíñòðóêòîðà</A> êëàññà -
ñïåöèàëüíîãî ìåòîäà, âûäåëÿþùåãî ïàìÿòü ïîä îáúåêò êëàññà è èíèöèàëèçèðóþùåãî
åãî ïîëÿ:</p>
<blockquote>
<p><code><strong>var</strong> p: Person := new Person('Èâàíîâ',20);</code></p>
</blockquote>
<p>Ïîñëå èíèöèàëèçàöèè ÷åðåç ïåðåìåííóþ òèïà êëàññ ìîæíî îáðàùàòüñÿ ê ïóáëè÷íûì
÷ëåíàì êëàññà (ïîëÿì, ìåòîäàì, ñâîéñòâàì), èñïîëüçóÿ òî÷å÷íóþ íîòàöèþ:</p>
<blockquote>
<p><code>Print(p.Name,p.Age);<br>p.Print;</code></p>
</blockquote>
<h2>Âûâîä ïåðåìåííîé òèïà êëàññ</h2>
<p>Ïî óìîë÷àíèþ ïðîöåäóðà <code>Write</code> äëÿ ïåðåìåííîé òèïà êëàññ âûâîäèò
ñîäåðæèìîå å¸ ïóáëè÷íûõ ïîëåé è ñâîéñòâ â êðóãëûõ ñêîáêàõ ÷åðåç çàïÿòóþ:</p>
<blockquote>
<p><code>Write(p); // Èâàíîâ 20</code></p>
</blockquote>
<p>×òîáû èçìåíèòü ýòî ïîâåäåíèå, â êëàññå ñëåäóåò
<A href="../Classes/virtual.html">ïåðåîïðåäåëèòü</A> âèðòóàëüíûé ìåòîä
<code>ToString</code> êëàññà <code>Object</code> - â ýòîì ñëó÷àå èìåííî îí áóäåò
âûçûâàòüñÿ ïðè âûâîäå îáúåêòà. </p>
<p>Íàïðèìåð:</p>
<blockquote>
<p><code><b>type</b><br>
&nbsp; Person = <b>class<br>
&nbsp;
&nbsp; ...<br>
&nbsp; &nbsp; function</b> ToString:
string; <b>override</b>;<br>
<b>&nbsp;&nbsp;&nbsp; begin</b><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result :=
$'Èìÿ: {Name} Âîçðàñò: {Age}'; <br>
<b>&nbsp;&nbsp;&nbsp; end</b>;<br>
<b>&nbsp; end</b>;<br>
&nbsp; ...<br>
<b>var</b> p: Person := new Person('Èâàíîâ',20);<br>
Writeln(p); // Èìÿ: Èâàíîâ&nbsp; Âîçðàñò: 20</code></p>
</blockquote>
<h2>Ïðèñâàèâàíèå è ïåðåäà÷à â êà÷åñòâå ïàðàìåòðîâ ïîäïðîãðàìì</h2>
<p>Ïåðåìåííàÿ òèïà êëàññ ÿâëÿåòñÿ ññûëêîé è õðàíèò ññûëêó íà îáúåêò, ñîçäàâàåìûé
âûçîâîì êîíñòðóêòîðà.</p>
<p>Êàê ññûëêà ïåðåìåííàÿ òèïà êëàññ ìîæåò õðàíèòü çíà÷åíèå <code>
<b>nil</b></code>:</p>
<blockquote>
<p><code>p :=<b> nil</b>;<br>
...<br>
if p =<b> nil</b> then ...</code></p>
</blockquote>
<p>Ïðè ïðèñâàèâàíèè ïåðåìåííûõ òèïà êëàññ êîïèðóåòñÿ òîëüêî ññûëêà. Ïîñëå
ïðèñâàèâàíèÿ îáå ïåðåìåííûå òèïà êëàññ áóäóò ññûëàòüñÿ íà îäèí îáúåêò
è ñîâìåñòíî ìîäèôèöèðîâàòü åãî:</p>
<blockquote>
<p><code><b>var</b> p1,p2: Person;<br>
...<br>
p1 := new Person('Ïåòðîâ',20);<br>
p2 := p1;<br>
p1.IncAge;<br>
p2.Print; // Èìÿ: Ïåòðîâ&nbsp;
Âîçðàñò: 21</code></p>
</blockquote>
<h2>Ñðàâíåíèå íà ðàâåíñòâî</h2>
<p>Ïðè ñðàâíåíèè ïåðåìåííûõ òèïà êëàññ íà ðàâåíñòâî ñðàâíèâàþòñÿ ññûëêè, à íå
çíà÷åíèÿ. </p>
<blockquote>
<p><code><b>var</b> p1 := new Person('Ïåòðîâ',20);<br><b>var</b> p2 := new
Person('Ïåòðîâ',20);<br>writeln(p1=p2); // False<br>
p2 := p1; <br>
writeln(p1=p2); // True</code></p>
</blockquote>
<p>Ýòî ïîâåäåíèå ìîæíî èçìåíèòü, <A href="operoverloading.html">ïåðåãðóçèâ</A>
îïåðàöèþ = äëÿ êëàññà.</p>
</body>