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

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ protected. 
ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C#)

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

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° MemberwiseClone Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Method класса LibClasses._1. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Main класса _2, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° inst_1a.Method. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ послСднСй вСрсии ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ True Π² Ρ‡Π΅Ρ€Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅. System.Console.WriteLine (i1.Equals (this));//Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ. _1 i1 = (_1)MemberwiseClone ();//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ экзСмпляра… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

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

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ класс LibClasses._1 унаслСдовал ΠΎΡ‚ System. Object Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΆΠ΅ пСрСчислСнныС статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Equals ΠΈ ReferenceEquals ΠΈ Π½Π΅ΡΡ‚атичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Equals, GetHashCode, GetType ΠΈ ToString. ВсС пСрСчислСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ public, поэтому доступны ΠΈΠ· Π»ΡŽΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Но Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄, наслСдуСмый ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° System. Object ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΈΠ΄Π΅Π½ лишь Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса LibClasses._1.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΡΡ‚ΠΎΠΌ, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Method класса LibClasses._1 ссылку Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ this. (с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ). Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, IntelliSense ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ список, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ поля s ΠΈ ΡƒΠΆΠ΅ извСстных Π½Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ MemberwiseClone. Π­Ρ‚ΠΎ нСстатичСский (Π½ΠΎ Π½Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ) ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°. ЀактичСски ΠΌΠ΅Ρ‚ΠΎΠ΄ MemberwiseClone создаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π», пСрСписывая Π² Π½Π΅Π³ΠΎ всС нСстатичСскиС поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° дословно. Если срСди ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов, Ρ‚ΠΎ ΡΡ‚ΠΈ ссылки Ρ‚Π°ΠΊΠΆΠ΅ дословно ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. Вакая копия называСтся «ΠΌΠ΅Π»ΠΊΠΎΠΉ» (shallow copy). Допустимо ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ поля ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°. ΠŸΡ€ΠΈ этом Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ поля-ссылки содСрТат ΡƒΠΆΠ΅ Π½ΠΎΠ²Ρ‹Π΅ ссылки — Π½Π° ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ «Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅» (deep copy).

Для нас сСйчас Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ MemberwiseClone доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса LibClasses._1 — наслСдника класса System. Object, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° public. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΠ΅Ρ‚ΠΎΠ΄ MemberwiseClone Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся private ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ класса System.Object. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ Π½Π΅ Π±Ρ‹Π» Π±Ρ‹ доступСн ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄Ρƒ Π²Π½Π΅ класса System.Object. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ MemberwiseClone ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа protected.

Π§Π»Π΅Π½ класса с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ protected доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π»ΠΈΠ±ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΅Π³ΠΎ наслСдников. БущСствуСт Π±ΠΎΠ»Π΅Π΅ сильная вСрсия — ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ protected internal. Π§Π»Π΅Π½ класса с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ protected internal доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наслСдникам, описанным Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ сборки, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ»Π°ΡΡ-ΠΏΡ€Π΅Π΄ΠΎΠΊ.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° MemberwiseClone Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Method класса LibClasses._1.

public void Method ().

{.

_1 i1 = (_1)MemberwiseClone ();//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ экзСмпляра.

System.Console.WriteLine (i1.Equals (this));//Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ.

}.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° прСобразования Ρ‚ΠΈΠΏΠ° (_1). Π’Π΅Π΄ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ MemberwiseClone Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° object, Π° ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹ΠΉ экзСмпляр i1 относится ΠΊ Ρ‚ΠΈΠΏΡƒ _1.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Main класса _2, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° inst_1a.Method.

static void Main (string[] args).

{.

LibClasses._1 inst_1a = new LibClasses._1();

inst_1a.Method ();

System.Console.ReadLine ();

}.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ послСднСй вСрсии ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ True Π² Ρ‡Π΅Ρ€Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅.

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