Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ОписаниС языка PascalABC.NETΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 21

Автор W Cat

КаТдоС ΠΏΠΎΠ»Π΅, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ свойство класса ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚) доступа, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΅Π³ΠΎ видимости. Π’ PascalABC.NET ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²ΠΈΠ΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа: public (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ), private (Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ), protected (Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ) ΠΈ internal (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ). К Ρ‡Π»Π΅Π½Ρƒ класса, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ public, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΈΠ· любого мСста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Π»Π΅Π½Ρ‹ класса с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ private доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² этого класса, Ρ‡Π»Π΅Π½Ρ‹ класса с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ protected доступны Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² этого класса ΠΈ всСх Π΅Π³ΠΎ подклассов, Ρ‡Π»Π΅Π½Ρ‹ класса с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ internal доступны Π²Π½ΡƒΡ‚Ρ€ΠΈ сборки (Ρ‚Π΅Ρ€ΠΌΠΈΠ½ .NET, сборка Π² нашСм ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ - это мноТСство Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ .exe ΠΈΠ»ΠΈ .dll-Ρ„Π°ΠΉΠ»Π°). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, private ΠΈ protected Ρ‡Π»Π΅Π½Ρ‹ Π²ΠΈΠ΄Π½Ρ‹ ΠΎΡ‚ΠΎΠ²ΡΡŽΠ΄Ρƒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… модуля, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ класс.

Π’Π΅Π»ΠΎ класса дСлится Π½Π° сСкции. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сСкции располагаСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ΄ΡƒΡ‚ поля, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства с доступом, опрСдСляСмым этим ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ сСкции ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π² этом случаС подразумСваСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ internal. Π’ классС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство сСкций, Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС.

НапримСр, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ располагаСтся Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅:

type

A = class

private

x: integer;

protected

a: integer;

public

constructor Create(xx: integer)

begin

x := xx; // Π²Π΅Ρ€Π½ΠΎ, Ρ‚.ΠΊ. Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ полю x

a := 0; // Π²Π΅Ρ€Π½ΠΎ

end;

;

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΏΡƒΡΡ‚ΡŒ располагаСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅: type

B = class(A)

public

procedure print;

begin

writeln(a); // Π²Π΅Ρ€Π½ΠΎ, Ρ‚.ΠΊ. a - Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅

writeln(x); // Π½Π΅Π²Π΅Ρ€Π½ΠΎ, Ρ‚.ΠΊ. Ρ… - Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ ΠΏΠΎΠ»Π΅

end;

end;

...

var b1: B := new B(5);

...

writeln(b1.x); // Π½Π΅Π²Π΅Ρ€Π½ΠΎ, Ρ‚.ΠΊ. Ρ… - Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ ΠΏΠΎΠ»Π΅

writeln(b1.a); // Π½Π΅Π²Π΅Ρ€Π½ΠΎ, Ρ‚.ΠΊ. a - Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅

b1.print; // Π²Π΅Ρ€Π½ΠΎ, Ρ‚.ΠΊ. print - ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄


ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎ тСксту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π²Π΅Ρ€Π½ΠΎΠ΅ ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ Π² смыслС доступа ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ полям ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈΠ»ΠΈ записи. ΠžΡΠΎΠ±Ρ‹ΠΌΠΈ разновидностями ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ конструкторы, дСструкторы ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса (ΡΡ‚ΠΈΠ»ΡŒ 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, содСрТащий опрСдСлСния матСматичСских ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ»Π΅ΠΉ

ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅Π³ΠΎ поля ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ автоматичСски Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ явно. Π˜Ρ… инициализация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π² конструкторС, Ρ‚Π°ΠΊ ΠΈ нСпосрСдствСнно ΠΏΡ€ΠΈ описании. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ поля ΠΏΡ€ΠΈ описании ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ вставляСтся Π² Π½Π°Ρ‡Π°Π»ΠΎ Π’Π‘Π•Π₯ конструкторов.

НапримСр:

type

A = class

private

x: integer := 1;

y: integer;

l := new List<integer>;

public

constructor Create(xx,yy: integer);

begin

x := xx;

y := yy;

end;

constructor Create;

begin

end;

end;

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄ x:=1; l := new List<integer> вставляСтся Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ конструктора.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… конструкторами.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ прСдставляСт собой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² динамичСской памяти, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Π΅Π³ΠΎ поля ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ сразу присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° класс. ΠŸΡ€ΠΈ описании конструктора вмСсто слуТСбного слова function ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ слуТСбноС слово constructor. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для конструктора Π½Π΅ указываСтся Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

НапримСр:

type

Person = class

private

nm: string;

ag: integer;

public

constructor Create(name: string; age: integer);

end;

...

constructor Person.Create(name: string; age: integer);

begin

nm := name;

ag := age;

end;

Π’ PascalABC.NET конструктор всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ имя Create. ΠŸΡ€ΠΈ описании конструктора Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ имя:

type

Person = class

constructor (name: string; age: integer);

begin

nm := name;

ag := age;

end;

end;

Π’ силу особСнностСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² конструкторов Π² .NET Π² PascalABC.NET всСгда создаСтся конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор). Π­Ρ‚ΠΎΡ‚ конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ всС поля Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями (строковыС поля - пустыми строками, логичСскиС - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ False).

Для Π²Ρ‹Π·ΠΎΠ²Π° конструктора ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° способа.

1 способ. Π’ стилС Object Pascal.

Для Π²Ρ‹Π·ΠΎΠ²Π° конструктора слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя класса, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, имя конструктора ΠΈ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². НапримСр:

var p: Person;

p := Person.Create('Иванов',20);

2 способ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ new - Π² стилС C# (ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ).

var p: Person;

p := new Person('Иванов',20);

ДСструктор Π² Object Pascal - ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‰Π°Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‰Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Π½ΠΈΠΌΠ°Π». ΠŸΡ€ΠΈ описании дСструктора вмСсто слуТСбного слова procedure ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ слуТСбноС слово destructor.

НапримСр:

destructor Destroy;

begin

...

end;

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² PascalABC.NET ΠΏΠ°ΠΌΡΡ‚ΡŒ управляСтся сборщиком мусора, дСструктор Π² PascalABC.NET Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ ΠΈ прСдставляСт собой ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ-ΠΌΠ΅Ρ‚ΠΎΠ΄.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ объявлСниС классов

Π”Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ класса ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² качСствС ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов, цикличСски ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°.

НапримСр:

type

AAA = class

b: BBB;

end;

BBB = class

a: AAA;

end;

Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏ BBB Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ описания поля b Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ описаниСм класса Π² Π²ΠΈΠ΄Π΅

ИмяКласса = class;

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ описанный класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ описан Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ сСкции type:

type

BBB = class;

AAA = class

b: BBB;

end;

BBB = class

a: AAA;

end;

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Self

Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ нСстатичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° нСявно опрСдСляСтся пСрСмСнная Self, ΡΡΡ‹Π»Π°ΡŽΡ‰Π°ΡΡΡ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ этот ΠΌΠ΅Ρ‚ΠΎΠ΄.

НапримСр:

type

A = class

i: integer;

constructor Create(i: integer);

begin