79 lines
4.7 KiB
HTML
79 lines
4.7 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||
</object>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||
<title></title>
|
||
<link rel="StyleSheet" href="../../default.css">
|
||
</head>
|
||
|
||
<body>
|
||
<H1>Методы</H1>
|
||
<p>Методы представляют собой процедуры и функции, объявленные внутри класса или
|
||
записи. Особыми разновидностями методов являются конструкторы, деструкторы и
|
||
перегруженные операции.</p>
|
||
<p>Определение методов можно давать как внутри класса (стиль
|
||
Java, C#, C++), так и вне класса (стиль
|
||
Delphi, C++). При определении метода вне интерфейса
|
||
класса его имя предваряется именем класса с последующей точкой. Например:</p>
|
||
<blockquote>
|
||
<p><code><b>type</b> <br>
|
||
Rectangle =<b> class</b><br>
|
||
x1,y1,x2,y2: integer;<br>
|
||
<b>constructor</b> Create(xx1,yy1,xx2,yy2: integer);<br>
|
||
<b>begin<br>
|
||
</b> x1 := xx1;
|
||
x2 := xx2;<br>
|
||
y1 := yy1;
|
||
y2 := yy2;<br>
|
||
<b>end</b>;<br>
|
||
<b>function</b> Square: integer;<br>
|
||
<b>end</b>;</code></p>
|
||
<p><code><b>function</b> Rectangle.Square: integer;<br>
|
||
<b>begin</b><br>
|
||
Result := abs(x2-x1) * abs(y2-y1);<br>
|
||
<b>end</b>;</code></p>
|
||
</blockquote>
|
||
<p>Обычно когда класс определяется в интерфейсной части модуля, то в интерфейсе
|
||
класса производят лишь объявление методов, реализацию же методов класса дают в
|
||
секции реализации модуля.</p>
|
||
<p>Методы делятся на <i> <span lang="ru">классовые</span></i> и <i>экземплярные</i>.
|
||
<span lang="ru">Классовые методы в </span>.NET <span lang="ru">называются
|
||
<i>статическими</i>. О</span>бъявлени<span lang="ru">е</span> <span lang="ru">классов</span>ого метода
|
||
<span lang="ru">начинается с ключевого слова </span><code><b>class</b></code>. Экземплярные методы
|
||
можно вызывать только через переменную-объект класса. <span lang="ru">Классовые</span> же методы не
|
||
связаны с конкретным экземпляром класса; их следует
|
||
вызывать в виде: </p>
|
||
<blockquote>
|
||
<p><i>имя класса</i><code>.</code><i>имя метода</i><code>(</code><i>параметры</i><code>)</code>
|
||
</p>
|
||
</blockquote>
|
||
<p>Внутри <span lang="ru">классов</span>ого метода не может быть обращения к полям класса, а может
|
||
быть только обращение к другим <span lang="ru">классовы</span>м методам. Напротив, экземплярный метод
|
||
может вызывать <span lang="ru">классовый</span>.</p>
|
||
<p>Например:</p>
|
||
<blockquote>
|
||
<p><code><b>type</b> <br> Rectangle =<b> class<br>
|
||
</b>...<br>
|
||
<b>class procedure</b> Move(<b>var</b>
|
||
r: Rectangle; dx,dy: integer);<br>
|
||
<b>begin</b><br>
|
||
r.x1 += dx; r.x2 += dx;<br>
|
||
r.y1 += dy; r.y2 += dy;<br>
|
||
<b>end</b>;<br>
|
||
<b>end</b>;<br>
|
||
...<br>
|
||
<b>var</b> r := <b>new</b> Rectangle(10,10,100,100);<br>
|
||
Rectangle.Move(r,5,5);</code></p>
|
||
</blockquote>
|
||
<p>По существу, <span lang="ru">классовые</span> методы являются разновидностью
|
||
глобальных<span lang="ru"> подпрограмм</span>, но находятся внутри класса, что подчеркивает, что они осуществляют
|
||
действия, связанные именно с этим классом. Класс в этом случае выступает только
|
||
в роли пространства имен.</p>
|
||
<p>Нередко создаются классы, целиком состоящие из <span lang="ru">классовых
|
||
</span>методов. Таков, например, класс <code>System.Math</code>,
|
||
содержащий определения математических подпрограмм.</p>
|
||
</body>
|
||
|
||
</html> |