ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅, ΠΎΡ‡Π΅Π½ΡŒ быстро...
Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ вмСстС Π΄ΠΎ ΠΏΠΎΠ±Π΅Π΄Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ наслСдовании

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ПокаТСм Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (экранированиС) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ класс «Ρ„ΠΈΠ³ΡƒΡ€Π° Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ вдоль ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½Ρ‹Ρ… осСй». Π’Π°ΠΊΠΎΠΉ класс Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ для классов «ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ», «ΡΠ»Π»ΠΈΠΏΡ», «Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ» ΠΈ Ρ‚. Π΄. Для простоты Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° стороны ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½Ρ‹ΠΌ осям, Ρƒ ΡΠ»Π»ΠΈΠΏΡΠ° оси ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½Ρ‹ΠΌ осям, Ρƒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° сторона… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ наслСдовании (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

О ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π°Ρ…. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ наслСдования с ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ «ΠΊΡ€ΡƒΠ³» ΠΈ «ΠΊΠΎΠ»ΡŒΡ†ΠΎ» конструктор ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Ring явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ обращаСтся ΠΊ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρƒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Disk с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выраТСния base (Ri). ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ происходит Π΄ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‚Π΅Π»Π° конструктора — Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ конструктора:

public Ring (double Ri, double ri): base (Ri) {rad = ri;}.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ»Π΅ rad (с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ protected) Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Disk доступно для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ конструктора:

public Ring (double Ri, double ri) {base.rad = Ri; rad = ri;}.

Π’Π½Π΅ΡˆΠ½Π΅ всС выглядит ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ опрСдСлСния Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Disk, Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ выдаст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅:

'Disk' does not contain a constructor that takes '0' arguments.

(Disk Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ конструктора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ '0' Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, компилятор использовал Π΄Π²Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ — Ссли Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса присутствуСт объявлСниС хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ конструктора, Ρ‚ΠΎ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² автоматичСски Π² ΠΊΠ»Π°ΡΡ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚ся. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ относится ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡŽ. Π£ΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‡Π»Π΅Π½ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, конструкторы Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ся. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° конструктора ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Если этого Π½Π΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ, Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ объявлСниС конструктора (Ρ‚ΠΎΡ‡Π½Π΅Π΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€) ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρƒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΊΠ»Π°ΡΡΠ΅ Disk конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² отсутствуСт, Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ сообщСниСм ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅.

Π­ΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π½Π΅Ρ‚ нСобходимости ΠΏΠΎΡΡΠ½ΡΡ‚ΡŒ. А Π²ΠΎΡ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ классов остановимся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° (overload). Π’ ΡΡ‚ΠΎΠΌ случаС ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ классов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ спСцификации ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (ΠΈΠ½Π°Ρ‡Π΅ экранированиС ΠΈΠ»ΠΈ сокрытиС, hiding) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса (спСцификации ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚). Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ (virtual), ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ (overriding) Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах обСспСчиваСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ.

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈ наслСдовании Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚.

ΠŸΡ€ΠΈ экранировании ΠΌΠ΅Ρ‚ΠΎΠ΄Π° стандарт Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΡΠ½Π°Π±ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ new. ΠŸΡ€ΠΈ Π΅Π³ΠΎ отсутствии компиляция ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π½ΠΎ Π²Ρ‹Π΄Π°Π΅Ρ‚ся ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ (Warning). Π’ Π½Π΅ΠΌ программисту ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎ ΠΎΠΏΠ»ΠΎΡˆΠ½ΠΎΡΡ‚ΠΈ. Если ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅ имя ΠͺΠ°8Π΅.имя_ΠΌΠ΅Ρ‚ΠΎΠ΄Π°_Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ_класса.

ПокаТСм Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (экранированиС) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ класс «Ρ„ΠΈΠ³ΡƒΡ€Π° Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ вдоль ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½Ρ‹Ρ… осСй». Π’Π°ΠΊΠΎΠΉ класс Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ для классов «ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ», «ΡΠ»Π»ΠΈΠΏΡ», «Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ» ΠΈ Ρ‚. Π΄. Для простоты Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° стороны ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½Ρ‹ΠΌ осям, Ρƒ ΡΠ»Π»ΠΈΠΏΡΠ° оси ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½Ρ‹ΠΌ осям, Ρƒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° сторона ΠΈ ΠΏΠ΅Ρ€ΠΏΠ΅Π½Π΄ΠΈΠΊΡƒΠ»ΡΡ€Π½Π°Ρ Π΅ΠΉ Π²Ρ‹ΡΠΎΡ‚Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½Ρ‹ΠΌ осям.

// 1306.cs — экранированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈ наслСдовании class Figure 11 Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс {.

protected double dx, dy; 11 Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ вдоль осСй public void print ().

{

Console.WriteLine ('Ta6apnTbi: dx={0:f2), dy={l:f2}", dx, dy);

}

>

// ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс — ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ: class Rectangle: Figure {.

public Rectangle (double xi, double yi).

{ dx = xi; dy = yi; } public new void print ().

{

Console.Write («ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ! «);

base.printQ;

} }

// ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс — Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ: class Triangle: Figure {.

public Triangle (double xi, double yi).

{ dx = xi; dy = yi; } public new void print ().

{

Console.Write («Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ! «); base. printQ;

} }

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов Π΅ΡΡ‚ΡŒ свой ΠΌΠ΅Ρ‚ΠΎΠ΄ print (), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ экранируСт ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ print () ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ print () Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… классов ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

class Program.

{

static void MainQ.

{

Rectangle rec = new Rectangle (3.0, 4.0); rec. print ();

Triangle tre = new Triangle (5.0, 4.0); tre. print ();

Figure fig = new Figure (); fig. printQ;

>

>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ! Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=3,00, dy=4,00.

Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ! Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=5,00, dy=4,00.

Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=0,0, dy=0,0.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ экранировании ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΡΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Ρƒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚, этот Ρ„Π°ΠΊΡ‚ Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅Ρ‚ся Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. БсылкС с Ρ‚ΠΈΠΏΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. ПослС Ρ‚Π°ΠΊΠΎΠ³ΠΎ присваивания ссылка Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ доступа ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ (Π½Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ) ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌΠΈ ссылками Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Figure, Π°Π΄Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов Triangle, ΠΈ Rectangle (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 1307.cs).

static void MainQ.

{

Figure figl = new Rectangle (3.0, 4.0);

Figure fig2 = new Triangle (5.0, 4.0);

Figure fig3 = new FigureQ; figl. print (); fig2. print (); fig3. print ();

}

Π’Ρ€ΠΈ ссылки, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏ Figure, ассоциированы с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… классов. Π—Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих ссылок Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ обращСния ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ print (). Π’ΠΎ Π²ΡΠ΅Ρ… случаях вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=3,00, dy=4,00.

Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=5,00, dy=4,00.

Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=0,00, dy=0,00.

АдрСсаты ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡΡ… figl. printQ, fig2. print (), fig3. print () ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ссылок, Π° Π½Π΅ Ρ‚ΠΈΠΏΠΎΠΌ значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ассоциировано с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ссылкой Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Бсылки figl, fig2, fig3 ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Figure, поэтому всС Ρ‚Ρ€ΠΈ обращСния отнСсСны ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ print () Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Бвязано это с Π½Π΅Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² print ().

Бсылка с Ρ‚ΠΈΠΏΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² ΡΡ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ адрСсован этой ссылкой. Для опрСдСлСния Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Π΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ virtual. Π’ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС для пСрСопрСдСлСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ override. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ (private).

Π’ Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ измСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π²ΠΈΠ΄ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 1308.cs):

public virtual void print ().

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π²ΠΈΠ΄:

public override void print ().

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ new Π·Π°ΠΌΠ΅Π½Π΅Π½ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ override.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ссылок figl, fig2, fig3 Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ! Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=3,00, dy=4,00.

Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ! Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=5,00, dy=4,00.

Π“Π°Π±Π°Ρ€ΠΈΡ‚Ρ‹: dx=0,00, dy=0,00.

Π—Π΄Π΅ΡΡŒ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ print () ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π²Ρ‹Π·ΠΎΠ² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° print () Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ спСцификации ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΠΌΠ΅Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½ΠΎ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ‚ΠΎΡ€, событиС (см. Π² Ρ€Π°Π·Π΄. 17.6) ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ, Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ virtual. ВсС описанныС возмоТности Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π½Π° ΡΡ‚ΠΈ Ρ‡Π»Π΅Π½Ρ‹.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ссылок с Ρ‚ΠΈΠΏΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ возмоТности Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π². Как ΡƒΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ссылкС с Ρ‚ΠΈΠΏΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Если Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ссылки с Ρ‚ΠΈΠΏΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

// 1309.cs — массив ссылок с Ρ‚ΠΈΠΏΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса using System; class, А {.

public virtual string record ().

{

return «Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс!» ;

} }

class Π’: A.

{

public override string recordQ.

{

return «ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ Π’!» ;

}

>

class C: A.

{

public override string recordQ.

{

return «ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ C!» ;

} }

class Program.

{

static void MainQ.

{

A[] arrA = new A[] { new A (), new B (), new C (), new B () }; foreach (A rec in arrA).

Console.WriteLine (rec. recordQ);

} }

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс!

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ Π’!

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ Π‘!

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ Π’!

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° слуТит ссылка с Ρ‚ΠΈΠΏΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ Π²ΠΌΠ΅ΡΡ‚ΠΎ Π½Π΅Π΅ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Π­Ρ‚Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ дСмонстрируСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

// 1310.cs — ссылка с Ρ‚ΠΈΠΏΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ using System; class Aclass { }.

class Bclass: Aclass { }.

class Cclass: Aclass { }.

class Program.

{

static void type (Aclass par).

{

Console. Write Line (par .ToStringQ);

>

static void Main ().

{

type (new Aclass ()); type (new Bclass ()); type (new CclassQ);

} }

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Aclass.

Bclass.

Cclass.

Если Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 13_ll.cs):

static Aclass type (int m).

{

if (m == 0) return new Bclass (); if (m == 1) return new Cclass (); return new Aclass ();

>

static void Main ().

{

for (int i = 0; i < 3; i++).

Console.WriteLine (type (i).GetType ());

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Bclass.

Cclass.

Aclass.

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

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ