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

НаслСдованиС (inheritance). ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C#)

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса вызываСтся всСгда, ΠΊΠΎΠ³Π΄Π° вызываСтся конструктор наслСдника. Π‘ ΡΡ‚ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса _1 (Ρ„Π°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ LibCode) ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΈΠΌΠ΅Π» Π²ΠΈΠ΄. Бмысл этого коммСнтария Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом (ΠΈΠ»ΠΈ, ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ) класса LibClasses._1 являСтся класс object ΠΈ Π΅Π³ΠΎ конструктор с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ object вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

НаслСдованиС (inheritance). ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C#) (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ВСрнСмся ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ MainExe, ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡŽ класса _2. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Main Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ строку.

LibClasses._1.

Π’ ΡΡ‚ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ IntelliSense ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ список, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Equals ΠΈ ReferenceEquals. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, класс LibClasses._1 содСрТит Π΄Π²Π° статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Но ΠΎΡ‚ΠΊΡƒΠ΄Π° эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹? Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… явно Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ LibClasses._1!

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡƒΡŽ строку Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

string.

На ΡΡ‚ΠΎΡ‚ Ρ€Π°Π· IntelliSense ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ список статичСских Ρ‡Π»Π΅Π½ΠΎΠ² класса System.String. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Equals ΠΈ ReferenceEquals, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΠΊΠ»Π°ΡΡΠ° LibClasses._1.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΅Ρ‰Π΅ строку.

double.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ список статичСских Ρ‡Π»Π΅Π½ΠΎΠ² класса System. Double ΠΈ Π² Π½Π΅ΠΌ встрСтятся Ρ‚Π΅ ΠΆΠ΅ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Equals ΠΈ ReferenceEquals.

Одним ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… качСств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ являСтся ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ классов Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. Класс-наслСдник (derived class) ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ класса-ΠΏΡ€Π΅Π΄ΠΊΠ° (base class) — ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, поля ΠΈ Ρ‚. Π΄. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс-наслСдник ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ наслСдуСмыС Ρ‡Π»Π΅Π½Ρ‹ класса-ΠΏΡ€Π΅Π΄ΠΊΠ°, ΠΊΠ°ΠΊ свои собствСнныС.

Π’ ΡΠ·Ρ‹ΠΊΠ΅ C# ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса-ΠΏΡ€Π΅Π΄ΠΊΠ°. Но Ρƒ ΠΊΠ»Π°ΡΡΠ°-ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ свой ΠΏΡ€Π΅Π΄ΠΎΠΊ ΠΈ Ρ‚. Π΄. Π’ ΠΎΡΠ½ΠΎΠ²Π΅ всСх классов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² .NET, Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ — класс System.Object. ΠŸΡ€ΡΠΌΡ‹ΠΌ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ описанного Π½Π°ΠΌΠΈ класса LibClasses._1 являСтся ΠΈΠΌΠ΅Π½Π½ΠΎ класс System.Object. ПсСвдонимом класса System. Object являСтся слуТСбноС слово object.

НаслСдованиС ΠΈ Π²Ρ‹Π·ΠΎΠ² конструктора Π•Ρ‰Π΅ Ρ€Π°Π· рассмотрим класс _2 ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ Π² Π½Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

static LibClasses._1 inst1 = new LibClasses._1();

УстановитС ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΡƒ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ тСкста этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π”Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Run To Cursor (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· ΠΊΠΎΠ½Ρ‚Скстного мСню). ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ строку с ΡΡ‚ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, помСститС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΊΠΈ Π½Π° ΠΈΠΌΡ _1 конструктора класса LibClasses._1, стоящСго послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new. Π’ΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²ΠΈΠ΄Π°.

+LibClasses._1|LibClasses._1.

Π£ΠΊΠ°Π·Π°Π² Π½Π° +, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

base {object}|object.

Бмысл этого коммСнтария Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом (ΠΈΠ»ΠΈ, ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ) класса LibClasses._1 являСтся класс object ΠΈ Π΅Π³ΠΎ конструктор с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ object вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ конструктора LibClasses._1.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΡΡ‚ΠΎΠΌ лишний Ρ€Π°Π·, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ LibClasses Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° LibCode Π½ΠΎΠ²Ρ‹ΠΉ класс _1Der с ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ.

public class _1Der: _1.

{.

}.

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ класс _1Der — наслСдник класса _1. Класс _1Der пуст. Но, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΠΌΠ΅Π΅Ρ‚ конструктор с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ это, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΊΠ»Π°ΡΡΠ΅ _2 послС строки.

static LibClasses._1 inst1 = new LibClasses._1();

строку.

static LibClasses._1Der inst_1Der = new LibClasses._1Der ();

Π’Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ описан ΠΈ ΡΠΎΠ·Π΄Π°Π½ экзСмпляр класса _1Der, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ класс _1.

УстановитС ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΡƒ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ тСкста этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π”Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Run To Cursor (ΠΈΠ· ΠΊΠΎΠ½Ρ‚Скстного мСню). ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ строку с ΡΡ‚ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, помСститС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΊΠΈ Π½Π° ΠΈΠΌΡ _1Der конструктора класса LibClasses._1Der, стоящСго послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new. Π’ΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²ΠΈΠ΄Π°.

+LibClasses._1Der|LibClasses._1Der.

Π£ΠΊΠ°Π·Π°Π² Π½Π° +, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС.

+base {LibClasses._1}|LibClasses._1.

Π’Π½ΠΎΠ²ΡŒ ΡƒΠΊΠ°Π·Π°Π² Π½Π° +, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

base {object}|object.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса вызываСтся всСгда, ΠΊΠΎΠ³Π΄Π° вызываСтся конструктор наслСдника. Π‘ ΡΡ‚ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса _1 (Ρ„Π°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ LibCode) ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΈΠΌΠ΅Π» Π²ΠΈΠ΄.

public _1().

{.

System.Console.WriteLine («Base constructor»);

}.

ПослС этого Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π’ Ρ‡Π΅Ρ€Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ строка Base constructor.

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ конструктор класса _1 вызываСтся Π΄Π²Π°ΠΆΠ΄Ρ‹ — строкой ΠΊΠΎΠ΄Π°.

static LibClasses._1 inst1 = new LibClasses._1();

Π² ΠΊΠ»Π°ΡΡΠ΅ _2, ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° Π½Π΅ΠΉ строкой ΠΊΠΎΠ΄Π°.

static LibClasses._1Der inst_1Der = new LibClasses._1Der ();

ПослСдняя строка создаСт экзСмпляр inst_1Der класса-наслСдника _1Der. Но ΠΏΡ€ΠΈ этом конструктор класса _1Der Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ нСявно конструктор своСго ΠΏΡ€Π΅Π΄ΠΊΠ°, ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса _1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ…ΠΎΠ΄ выполнСния ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Run To Cursor ΠΈ Step Into.

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