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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 122

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

Π’Π°ΠΊ ΠΊΠ°ΠΊ C# создан с Ρ†Π΅Π»ΡŒΡŽ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Π΅ΠΌ C++, ΠΎΠ½ ΠΌΠ΅Π½Π΅Π΅ Π³ΠΈΠ±ΠΎΠΊ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Он Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ понятиС явного ΠΈ нСявного прСобразования Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. НСкоторыС прСобразования ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ нСявныС, Ρ‡Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нСявного, Π»ΠΈΠ±ΠΎ явного синтаксиса. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ явного прСобразования Ρ‚ΠΈΠΏΠΎΠ², ΠΈ компилятор Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ (Π° Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π² C++), Ссли ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ нСявно.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π² C#, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ числовыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹. НСявными прСобразованиями Π±ΡƒΠ΄ΡƒΡ‚ прСобразования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ риск ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int Π² long ΠΈΠ»ΠΈ float Π² double. Π―Π²Π½Ρ‹ΠΌΠΈ прСобразованиями ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потСря Π΄Π°Π½Π½Ρ‹Ρ… Π² связи с ошибкой пСрСполнСния, ошибкой Π·Π½Π°ΠΊΠ° ΠΈΠ»ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части числа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, float Π² int, int Π² uint ΠΈΠ»ΠΈ short Π² ulong. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ char рассматриваСтся нСсколько ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ явно Π² ΠΈΠ»ΠΈ ΠΈΠ· char.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ выраТСния ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ допустимыми Π² ΠΊΠΎΠ΄Π΅ C#:

float f1 = 40.0F;

long l1 = (long)f1; // явноС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ошибка округлСния

short s1 = (short)l1; // явноС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ошибка пСрСполнСния

int i1 = s1; // нСявноС β€” Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ

uint i2 = (uint)i1; // явноС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ошибка Π·Π½Π°ΠΊΠ°

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² C# явноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… всСгда дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ старого синтаксиса Π² стилС C. Новый синтаксис C++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСльзя.

uint i2 = uint(i1); // Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ синтаксис - это Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΠΎΠ΅ (checked) ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…

C# ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² провСряСмом (checked) контСкстС. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ срСда выполнСния .NET Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ пСрСполнСния ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, OverFlowException). Π­Ρ‚ΠΎ свойство Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³Π° Π² C++.

checked {

 int I1 = -3;

 uint I2 = (uint)I1;

}

Π’ связи с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ контСкста вторая строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Если Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ checked, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈ пСрСмСнная I2 Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ мусор.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° строк выполняСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³Ρ‡Π΅ Π² C#, Ρ‡Π΅ΠΌ это Π±Ρ‹Π»ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ Π² C++. Π­Ρ‚ΠΎ связано с понятиСм строки ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ распознаСтся компилятором C#. Π’ C# Π½Π΅Ρ‚ нСобходимости Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ строки ΠΊΠ°ΠΊ массивы символов.

Π‘Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΠΌ эквивалСнтом для Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… string Π² C# являСтся класс string Π² C++ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Однако строка C# отличаСтся ΠΎΡ‚ строки C++ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ основными свойствами.

β–‘ Π‘Ρ‚Ρ€ΠΎΠΊΠ° C# содСрТит символы Unicode, Π° Π½Π΅ ANSI.

β–‘ Π‘Ρ‚Ρ€ΠΎΠΊΠ° C# ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ свойств, Ρ‡Π΅ΠΌ вСрсия Π² C++.

β–‘ ΠšΠ»Π°ΡΡ string стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C++ являСтся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ классом, прСдоставлСнным Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² C# синтаксис языка ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ класс string ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ языка.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ кодирования

C# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ кодирования ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов, Ρ‡Ρ‚ΠΎ ΠΈ C++,β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Π½Π°ΠΊΠ»ΠΎΠ½Π½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹. Π’ΠΎΡ‚ список кодирования:

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Имя символа ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Unicode \' ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Π°Ρ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° 0x0027 \" Двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° 0x0022 \\ ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш 0Ρ…005C \0 Null 0x0000 \a Π‘ΠΈΠ³Π½Π°Π» 0x0007 \b Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ 0x0008 \f ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ страницы 0x000C \n Новая строка 0x000A \r Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ 0x000D \t Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ табуляция 0x0009 \v Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ табуляция 0x000B

Π­Ρ‚ΠΎ ΠΏΠΎ сути ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² C# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ ΠΊΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ Π² C++, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ C# Π½Π΅ распознаСт \?.

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π° отличия ΠΌΠ΅ΠΆΠ΄Ρƒ символами кодирования Π² C++ ΠΈ C#:

β–‘ ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кодирования \0 распознаСтся Π² C#. Однако ΠΎΠ½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€ строки Π² C# ΠΈ поэтому ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² строку. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ C# Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, сохраняя ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ свои Π΄Π»ΠΈΠ½Ρ‹, поэтому Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ символ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ строки C# Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любой символ Unicode.

β–‘ C# ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кодирования \uxxxx (ΠΈΠ»ΠΈ эквивалСнтно \Uxxxx), Π³Π΄Π΅ xxxx прСдставляСт 4-символьноС ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ число, \uxxxx прСдставляСт символ Unicode xxxx, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, \u0065 прСдставляСт 'Π΅'. Однако Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ кодирования \uxxxx ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΈ строковых константах. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ допустим Π² C#.

int R\u0065sult; // Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ int Result;

Result = 10;

Богласно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кодирования Π½Π΅ зависит ΠΎΡ‚ рСгистра символов: \uxxxx ΠΈ \Uxxxx Π±ΡƒΠ΄ΡƒΡ‚ эквивалСнтны. Однако ΠΏΡ€ΠΈ написании этой ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вСрсия Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ компилируСтся Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсиСй .NET.

C# ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ прСдставлСния строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½ для строк, содСрТащих ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы: Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ символа @ Π² Π½Π°Ρ‡Π°Π»Π΅ строки избавляСт всС символы ΠΎΡ‚ кодирования. Π­Ρ‚ΠΈ строки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ дословными строками. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строку C:\Book\Chapter2 ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ "C:\\Book\\ChaptΠ΅r2", Π»ΠΈΠ±ΠΎ @"C:\Book\Chapter2". Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ символы Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ Π² дословныС строки Π±Π΅Π· кодирования:

string Message = @"Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС,

Π° это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС"

Π’ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ссылочныС Ρ‚ΠΈΠΏΡ‹

C# раздСляСт всС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π΄Π²Π΅ разновидности: Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ссылочныС Ρ‚ΠΈΠΏΡ‹. Π­Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ эквивалСнта Π² C++, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ всСгда нСявно содСрТат значСния, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСмСнная ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ объявлСна ΠΊΠ°ΠΊ ссылка Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Π’ C# Ρ‚ΠΈΠΏ значСния Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ содСрТит своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ВсС ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² C# ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ object ΠΈ string. Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свои собствСнныС структуры ΠΈ пСрСчислСния, ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ простыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² C# ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ°ΠΊ Π² C++, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ значСния.

int I = 10;

long J = I; // создаёт копию значСния 10

I = 15; //Π½Π΅ влияСт Π½Π° J

Бсылочный Ρ‚ΠΈΠΏ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π΅Π³ΠΎ имя, содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылку Π½Π° Ρ‚ΠΎ мСсто Π² памяти, Π³Π΄Π΅ хранятся Π΄Π°Π½Π½Ρ‹Π΅. БинтаксичСски ΠΎΠ½ дСйствуСт Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ°ΠΊ ссылки Π² C++, Π½ΠΎ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ, ссылки C# Π±Π»ΠΈΠΆΠ΅ ΠΊ указатСлям C++. Π’ C# object ΠΈ string ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ классы. Бсылки C# ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для указания Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎ большСй части Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ C++. Π’Π°ΠΊΠΆΠ΅ ссылкам C# ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null для указания, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ Π½Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ. НапримСр, возьмСм класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ MyClass, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ свойство Width.

MyClass My1 = new MyClass(); // Π² C# new просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструктор

My1.Width = 20;

MyClass My2 = My1; // My2 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° Ρ‚ΠΎ ΠΆΠ΅ мСсто

                   // Π² памяти, Ρ‡Ρ‚ΠΎ ΠΈ My1

ΠœΡƒ2.Width = 30; // Π’Π΅ΠΏΠ΅Ρ€ΡŒ My1.Width = 30, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ My1

                // ΠΈ ΠœΡƒ2 ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄Π½ΠΎ мСсто Π² памяти

My2 = null; // Π’Π΅ΠΏΠ΅Ρ€ΡŒ My2 Π½Π΅ ссылаСтся Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ,

            // My1 ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ссылаСтся Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Π’ C# Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ значСния ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ссылочный Ρ‚ΠΈΠΏ, это опрСдСляСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’ΠΈΠΏ значСния ΠΈ ссылочный Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ особСнности Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ссылочныС Ρ‚ΠΈΠΏΡ‹ всСгда хранятся Π² ΠΊΡƒΡ‡Π΅, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранятся Π² стСкС. Π­Ρ‚ΠΎ рассматриваСтся Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠ± ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.