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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# 4.0 ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство - 2011Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 40

Автор Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚ Π¨ΠΈΠ»Π΄Ρ‚

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ дСструктора. Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ создаСтся ΠΈ уничтоТаСтся большоС число ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ процСсса активизируСтся "сборка мусора" ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ дСструкторы для уничтоТСния Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ дСструктора.

using System;

class Destruct { public int x;

public Destruct(int i) {

Ρ… = i ;

}

// ВызываСтся ΠΏΡ€ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

-Destruct() -{

Console.WriteLine("Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ " + Ρ…);

}

// Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ. public void Generator(int i) {

Destruct ΠΎ = new Destruct (i);

}

}

class DestructDemo { static void Main() { int count;

Destruct ob = new Destruct(0);

/* А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ большоС число ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ "сборка мусора".

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ "сборку мусора", Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, придСтся ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ число создаваСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². */

for(count=l; count < 100000; count++) ob.Generator(count);

Console.WriteLine("Π“ΠΎΡ‚ΠΎΠ²ΠΎ!");

}

}

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ… извСстным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрСмСнная Ρ… слуТит Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. А дСструктор Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ…, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ утилизируСтся. ΠžΡΠΎΠ±Ρ‹ΠΉ интСрСс Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Generator (), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Destruct. Π‘Π½Π°Ρ‡Π°Π»Π° Π² классС DestructDemo создаСтся исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ob Ρ‚ΠΈΠΏΠ° Destruct, Π° Π·Π°Ρ‚Π΅ΠΌ осущСствляСтся ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ созданиС ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ 100 тыс. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ этого процСсса происходит "сборка мусора". Насколько часто ΠΎΠ½Π° происходит β€” зависит ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π² Ρ‚ΠΎΠΌ числС ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ объСма свободной памяти, Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ Ρ‚.Π΄. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ сообщСния, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ дСструктором. Если ΠΆΠ΅ ΠΎΠ½ΠΈ Π½Π΅ появятся Π΄ΠΎ окончания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚.Π΅. Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ΠΎ сообщСниС "Π“ΠΎΡ‚ΠΎΠ²ΠΎ!", ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ число создаваСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², повысив ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство подсчитываСмых шагов Π² Ρ†ΠΈΠΊΠ»Π΅ for.

И Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΌΠ΅Ρ‚ΠΎΠ΄ WriteLine () вызываСтся Π² дСструкторС -Destruct () ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π΄ΠΈ наглядности Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΅Π³ΠΎ использования. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, дСструктор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π΅Π³ΠΎ классС.

Π’ силу Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ порядок Π²Ρ‹Π·ΠΎΠ²Π° дСструкторов Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΈΡ… Π½Π΅ слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для выполнСния дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ "сборку мусора", ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² части II этой ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΡ€ΠΈ рассмотрСнии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов Π‘#. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ инициализация "сборки мусора" Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ сниТСнию эффСктивности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρƒ систСмы "сборки мусора" ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ свои особСнности β€” Π΄Π°ΠΆΠ΅ Ссли Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ "сборку мусора" явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС Ρ€Π°Π²Π½ΠΎ нСльзя Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ эту Π³Π»Π°Π²Ρƒ^ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this. Когда ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся, Π΅ΠΌΡƒ автоматичСски пСрСдаСтся ссылка Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚.Π΅. Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вызываСтся Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚Π° ссылка обозначаСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом this. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎ ссылкС Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСйствуСт Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ стало яснСС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this, рассмотрим сначала ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создаСтся класс Rect, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π² сСбя ΠΌΠ΅Ρ‚ΠΎΠ΄ Area (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

using System;

class Rect {

public int Width; public int Height;

public Rect(int w, int h) {

Width = w;

Height = h;

}

public int Area() {

return Width * Height;

}

}

class UseRect {

static void Main() {

Rect rl = new Rect(4, 5);

Rect r2 = new Rect(7, 9);

Console.WriteLine("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° rl: " + rl.AreaO);

Console.WriteLine("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° r2: " + r2.Area());

}

}

Как Π²Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠΆΠ΅ Π±Ρ‹Ρ‚ΡŒ извСстно, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ доступны нСпосрСдствСнно Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уточнСния ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ класса. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

return Width * Height;

Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Area () ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Width ΠΈ Height, связанныС с Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ΅Π½Ρ‹, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Но Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

return this.Width * this.Height;

Π’ этом ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Area (). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ this .Width дСлаСтся ссылка Π½Π° копию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Width Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ this . Height β€” ссылка Π½Π° копию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Height этого ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊ, Ссли Π±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ Area () Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ…, Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ…. НаписаниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this прСдставляСт собой Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ записи.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² конструкторС. Π’ этом случаС ΠΎΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ конструируСтся. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Rect()

Width = w;

Height = h;

ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

this.Width = w; this.Height = h;

РазумССтся, Ρ‚Π°ΠΊΠΎΠΉ способ записи Π½Π΅ Π΄Π°Π΅Ρ‚ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… прСимущСств. Π Π°Π΄ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ вСсь класс Rect, написанный с использованиСм ссылки this.

using System;

class Rect {

public int Width; public int Height;

public Rect(int w, int h) { this.Width = w; this.Height = h;

}

public int Area()    {

return this.Width * this.Height;

}

}

class UseRect {

static void Main() {

Rect rl = new Rect(4, 5);

Rect r2 = new Rect(7, 9);

Console.WriteLine("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° rl: " + rl.AreaO);

Console.WriteLine("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° r2: " + r2.Area());

}

}

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅ способом Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Π‘#, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это практичСски Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π°Π΅Ρ‚, Π΄Π° ΠΈ стандартная Ρ„ΠΎΡ€ΠΌΠ° записи Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ понятнСС. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову this ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. НапримСр, Π² синтаксисС C# допускаСтся Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ экзСмпляра. Π’ этом случаС имя локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ скрываСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ экзСмпляра. Для доступа ΠΊ скрытой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ экзСмпляра ΠΈ слуТит ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this. НапримСр, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния синтаксиса C# способом написания конструктора Rect ().

public Rect(int Width, int Height) { this.Width = Width; this.Height = Height;

}

Π’ этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ написания конструктора Rect () ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡ…. Но для "обнаруТСния" скрытых ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… слуТит ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this.

ГЛАВА 7 ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈ строки

Π’ этой Π³Π»Π°Π²Π΅ Ρ€Π΅Ρ‡ΡŒ вновь ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π‘#. Π’ Π½Π΅ΠΉ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ массивы ΠΈ Ρ‚ΠΈΠΏ string, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° fore a ch.

ΠœΠ°ΡΡΠΈΠ²Ρ‹

Массив прСдставляСт собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с ΠΎΠ±Ρ‰ΠΈΠΌ для обращСния ΠΊ Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’ C# массивы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ, хотя Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. ΠœΠ°ΡΡΠΈΠ²Ρ‹ слуТат самым Ρ€Π°Π·Π½Ρ‹ΠΌ цСлям, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ срСдства для объСдинСния связанных вмСстС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НапримСр, Π² массивС ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ суточныС Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, зарСгистрированныС Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ мСсяца, ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… курсов ΠΈΠ»ΠΈ ΠΆΠ΅ названия ΠΊΠ½ΠΈΠ³ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈΠ· домашнСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

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