PascalABC.NET

Методы

Методы представляют собой процедуры и функции, объявленные внутри класса или записи. Особыми разновидностями методов являются конструкторы, деструкторы и перегруженные операции.

Определение методов можно давать как внутри класса (стиль Java, C#, C++), так и вне класса (стиль Delphi, C++). При определении метода вне интерфейса класса его имя предваряется именем класса с последующей точкой. Например:

type   Rectangle = class
    x1,y1,x2,y2: integer;
    constructor Create(xx1,yy1,xx2,yy2: integer);
    begin
      x1 := xx1; x2 := xx2;
      y1 := yy1; y2 := yy2;
    end;
    function Square: integer;
  end;

function Rectangle.Square: integer;
begin
  Result := abs(x2-x1) * abs(y2-y1);
end;

Обычно когда класс определяется в интерфейсной части модуля, то в интерфейсе класса производят лишь объявление методов, реализацию же методов класса дают в секции реализации модуля.

Методы делятся на классовые и экземплярные. Классовые методы в .NET называются статическими. Объявление классового метода начинается с ключевого слова class. Экземплярные методы можно вызывать только через переменную-объект класса. Классовые же методы не связаны с конкретным экземпляром класса; их следует вызывать в виде:

имя класса.имя метода(параметры)

Внутри классового метода не может быть обращения к полям класса, а может быть только обращение к другим классовым методам. Напротив, экземплярный метод может вызывать классовый.

Например:

type
  Rectangle = class
   
...
     class procedure Move(var r: Rectangle; dx,dy: integer);
     begin
       r.x1 += dx; r.x2 += dx;
       r.y1 += dy; r.y2 += dy;
     end;
  end;
...
var r := new Rectangle(10,10,100,100);
Rectangle.Move(r,5,5);

По существу, классовые методы являются разновидностью глобальных подпрограмм, но находятся внутри класса, что подчеркивает, что они осуществляют действия, связанные именно с этим классом. Класс в этом случае выступает только в роли пространства имен.

Нередко создаются классы, целиком состоящие из классовых методов. Таков, например, класс System.Math, содержащий определения математических подпрограмм.