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

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

Автор W Cat

PitPixel(x,y,Color.Black);

end;

end;

ИспользованиС override ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ абстрактных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ….

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ - это срСдство языка, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, опрСдСляСмыми ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’ PascalABC.NET ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π·Π½Π°Ρ‡ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для Ρ‚ΠΈΠΏΠ° T, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ классом ΠΈΠ»ΠΈ записью, осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ статичСской (классовой) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ operator Π—Π½Π°ΠΊΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ +=, -=, *=, /= осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСской (классовой) ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ пСрСдаСтся ΠΏΠΎ ссылкС.

НапримСр:

type

Complex = record

re,im: real;

class function operator+(a,b: Complex): Complex;

begin

Result.re := a.re + b.re;

Result.im := a.im + b.im;

end;

class function operator=(a,b: Complex): boolean;

begin

Result := (a.re = b.re) and (a.im = b.im);

end;

end;

Для ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

* ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ @ (взятиС адрСса), as, is, new. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ +=, -=, *=, /=, Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

* ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

* Π’ΠΈΠΏ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠΎΠΌ класса ΠΈΠ»ΠΈ записи, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° опСрация.

* ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ совпадаСт с количСством ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (2 - для Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ, 1 - для ΡƒΠ½Π°Ρ€Π½ΠΎΠΉ).

* ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ +=, -=, *=, /= для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСской ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ пСрСдаСтся ΠΏΠΎ ссылкС ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ записи ΠΈΠ»ΠΈ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ опрСдСляСтся данная опСрация, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - пСрСдаСтся ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ совмСстим ΠΏΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡŽ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

* Π’ΠΈΠΏΡ‹ интСрфСйсов Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°: Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ Π½Π° этапС компиляции.

* ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ привСдСния Ρ‚ΠΈΠΏΠ° Π·Π°Π΄Π°ΡŽΡ‚ΡΡ статичСскими функциями, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вмСсто ΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ operator implicit (для нСявного привСдСния Ρ‚ΠΈΠΏΠ°) ΠΈΠ»ΠΈ operator explicit (для явного привСдСния Ρ‚ΠΈΠΏΠ°).

НапримСр:

type

Complex = record

...

class function operator implicit(d: real): Complex;

begin

Result.re := d;

Result.im := 0;

end;

class function operator explicit(c: Complex): string;

begin

Result := Format('({0},{1})',c.re,c.im);

end;

class procedure operator+=(var c: Complex; value: Complex);

begin

c.re += value.re;

c.im += value.im;

end;

class function operator+(c,c1: Complex): Complex;

begin

Result.re := c.re + c1.re;

Result.im := c.im + c1.im;

end;

end;

МоТно ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ - Π² этом случаС ΠΏΡ€ΠΈ описании ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ слово class. НапримСр, Ρ‚Π°ΠΊ Π² систСмном ΠΌΠΎΠ΄ΡƒΠ»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ числа ΠΊ строкС:

function string.operator+(str: string; n: integer): string;

begin

result := str + n.ToString;

end;

ΠšΠ»Π°ΡΡΠΎΠ²Ρ‹Π΅ поля, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ конструкторы

Π’ классС ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ классовыС (статичСскиС) поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Они Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ экзСмпляру класса, Π° связаны с классом. Для ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ точСчная нотация, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° имя класса. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ классовым (статичСским), ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class.

НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ для класса Person количСство созданных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса ΠΊΠ°ΠΊ статичСскоС ΠΏΠΎΠ»Π΅ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅ΠΌ доступ ΠΊ этому полю Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° конструктора Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ статичСского поля Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° 1:

type

Person = class

private

name: string;

age: integer;

class cnt: integer := 0;

public

constructor (n: string; a: integer);

begin

cnt += 1;

name := n;

age := a;

end;

class function Count: integer;

begin

Result := cnt;

end;

end;

begin

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

var p1: Person := new Person('ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²',18);

writeln(Person.Count); // ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ классовому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Count

end.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ классовых ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ экзСмплярными. Из ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ экзСмплярным ΠΈ классовым полям, Π½ΠΎ ΠΈΠ· классовых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ классовым полям.

Аналогично ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ классовый (статичСский) конструктор, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для автоматичСской ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классовых ΠΏΠΎΠ»Π΅ΠΉ. ΠšΠ»Π°ΡΡΠΎΠ²Ρ‹ΠΉ конструктор описываСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом class ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ вызываСтся ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ любого статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ созданиСм ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° этого класса.

НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² классС Person классовоС ΠΏΠΎΠ»Π΅ - массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Person - ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π² классовом конструкторС. ΠŸΠΎΡ‚ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ массив ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классовой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ RandomPerson, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ случайный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Person:

type

Person = class

private

class arr: array of Person;

name: string;

age: integer;

public

class constructor;

begin

SetLength(arr,3);

arr[0] := new Person('Иванов',20);

arr[1] := new Person('ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²Π°',19);

arr[2] := new Person('Попов',35);

end;

//...

class function RandomPerson: Person;

begin

Result := arr[Random(3)];

end;

end;

const cnt = 10;

begin

var a := new Person[cnt];

for var i:=0 to a.Length-1 do

a[i] := Person.RandomPerson;

end.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

Π›ΡŽΠ±ΠΎΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ класс, хранящийся Π²ΠΎ внСшнСй dll, ΠΈ всС классы стандартной Π±ΠΈΠ±Π»ΠΈΡ‚Π΅ΠΊΠΈ .NET ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚Π΅ΠΌ. Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ставится имя Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠ³ΠΎ класса с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. НапримСр:

procedure integer.Print;

begin

write(Self)

end;

begin

var i := 1;

i.Print;

end.

МоТно Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ интСрфСйс, Ρ‚ΠΎΠ³Π΄Π° всС классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ этот интСрфСйс, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄. НапримСр, Π² систСмном ΠΌΠΎΠ΄ΡƒΠ»Π΅ PABCSystem Ρ‚Π°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ стандартный интСрфСйс IEnumerable<T> ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Print:

function System.Collections.Generic.IEnumerable<T>.Print(): IEnumerable<T>;

begin

var g := Self.GetEnumerator();

if g.MoveNext() then

write(g.Current);

while g.MoveNext() do

write(' ', g.Current);

Result := Self;

end;

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ всС классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс IEnumerable<T>, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Print:

function System.Collections.Generic.IEnumerable<T>.Print(): IEnumerable<T>;

begin

var g := Self.GetEnumerator();

if g.MoveNext() then

write(g.Current);

while g.MoveNext() do

write(' ', g.Current);

Result := Self;

end;

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ имССтся ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ:

* ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

* Если ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ имя, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅5Π½ΠΈΠ΅ отдаётся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.

АнонимныС классы

Иногда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Π½Π° Π»Π΅Ρ‚Ρƒ, Π½Π΅ описывая класс. Π£ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса Π½Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ (ΠΎΠ½ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ), Π½ΠΎ извСстСн Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса создаётся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

var p := new class(Name := 'Иванов', Age := 20);

Println(p.Name,p.Age);

Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° p автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ поля Name ΠΈ Age ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

Π”Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌΡƒ классу Ссли ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ, ΠΈ эти поля ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ. НапримСр:

var p1 := new class(Name := 'ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²', Age := 21);

p1 := p;

Если поля бСзымянного класса ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ - ΠΎΠ½ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ автоматичСски ΠΈ ΠΈΡ… ΠΈΠΌΠ΅Π½Π° ΠΈ Ρ‚ΠΈΠΏΡ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НапримСр:

var Name := 'Попова';

var Age := 23;

var p := new class(Name, Age);

Println(p.Name,p.Age);

Поля бСзымянного класса ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с составным ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ. Π’ этом случаС Π² качСствС ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»Π΅ΠΉ бСрутся послСдниС ΠΈΠΌΠ΅Π½Π° Π² Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠΉ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. НапримСр:

var d := new DateTime(2015,5,15);

var p := new class(d.Day, d.Month, d.Year);

Println(p.Day, p.Month, p.Year);

Println(p);

Автоклассы