Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ

НСмного ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π΅ readonly

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово readonly β€” это ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠΎΠ»Π΅ΠΉ. Если объявлСниС поля содСрТит ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly, присвоСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΈΠΌ полям ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ объявлСния ΠΈΠ»ΠΈ Π² конструкторС Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ классС.

Π’Π°ΠΌ ΠΆΠ΅ приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. ВсС ΠΊΠ°ΠΊ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ для Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, для ссылочных Ρ‚ΠΈΠΏΠΎΠ² Π½ΠΈΠΊΠ°ΠΊΠΈΡ… пояснСний Π½Π΅ приводится.
Π’ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠ½ΠΈΠ³ приводился ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π”Π°Π½Π½Ρ‹ΠΉ кусок ΠΊΠΎΠ΄Π° Π²Ρ‹Π·Π²Π°Π» Ρƒ мСня ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π°ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ documentQueue объявлСн ΠΊΠ°ΠΊ readonly, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ элСмСнты? Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, элСмСнты Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° становятся readonly. Π― написал Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ класс, Π½ΠΎ с использованиСм List. К ΠΌΠΎΠ΅ΠΌΡƒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ, элСмСнты измСнялись Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ трудностСй.

Π’ΠΎΠ³Π΄Π° я создал Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Queue documentQueue2 ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ documentQueue( documentQueue=documentQueue2). И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² этом случаС IntelieSense ΠΏΠΎΠΊΠ°Π·Π°Π»Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‡Ρ‚ΠΎ нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ полю доступному Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для ссылочных Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа readonly примСняСтся ΠΊ ссылкС β€” Π΅Π΅ нСльзя Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΆΠ΅ свойства, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ссылочного Ρ‚ΠΈΠΏΠ°, ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ доступными для измСнСния.
НадСюсь, данная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ ΠΊΠ°ΠΊ ΠΈ я быстрСС ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ язык.

О пСсочницС

Π­Ρ‚ΠΎ Β«ΠŸΠ΅ΡΠΎΡ‡Π½ΠΈΡ†Π°Β» β€” Ρ€Π°Π·Π΄Π΅Π», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π΄Π΅Π±ΡŽΡ‚Π½Ρ‹Π΅ посты ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠΏΡ€Π°Π²Π½Ρ‹ΠΌΠΈ участниками сообщСства.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ²ΡˆΠ΅ΠΉΡΡ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ β€” Ρ‚ΠΎΠ³Π΄Π° Π΅Ρ‘ смогут ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π₯Π°Π±Ρ€Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π·ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ΅, всС ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹, псСвдонимы ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

О ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ†ΠΈΠΈ

НС Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

readonly (Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ C#)

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово readonly β€” это ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… контСкстах:

Π’ объявлСнии поля readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ присвоСниС значСния полю ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ объявлСнии ΠΈΠ»ΠΈ Π² конструкторС этого класса. Полю Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΌΠΎΠΆΠ½ΠΎ нСсколько Ρ€Π°Π· Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ значСния Π² объявлСнии поля ΠΈ Π² конструкторС.

ПолС readonly нСльзя ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· конструктора. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой Ρ€Π°Π·Π½Ρ‹Π΅ послСдствия для Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ссылочных Ρ‚ΠΈΠΏΠΎΠ²:

Π’ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ ΠΈΠ·Π²Π½Π΅ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π²ΠΈΠ΄ΠΈΠΌΠΎΠ΅ ΠΈΠ·Π²Π½Π΅ ΠΈ доступноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΏΠΎΠ»Π΅ с измСняСмым ссылочным Ρ‚ΠΈΠΏΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ CA2104: НС ΠΎΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ ссылочныС Ρ‚ΠΈΠΏΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° readonly struct ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ структуры являСтся нСизмСняСмым. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² описании структуры readonly Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π’ΠΈΠΏΡ‹ структур.

Π’ объявлСнии Ρ‡Π»Π΅Π½Π° экзСмпляра Π² Ρ‚ΠΈΠΏΠ΅ структуры readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π»Π΅Π½ экзСмпляра Π½Π΅ измСняСт состояниС структуры. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎ Ρ‡Π»Π΅Π½Π°Ρ… экзСмпляров readonly Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π’ΠΈΠΏΡ‹ структур.

Π’ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ref readonly ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку, ΠΈ записи для этой ссылки Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Ρ‹ readonly struct ΠΈ ref readonly Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² C# 7.2. Π§Π»Π΅Π½Ρ‹ структуры readonly Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² C# 8.0

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ поля Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния

МоТно ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ полю readonly Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… контСкстах:

Когда пСрСмСнная инициализируСтся Π² объявлСнии, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ конструкторС экзСмпляра класса, содСрТащСго объявлСниС поля экзСмпляра.

Π’ статичСском конструкторС класса, содСрТащСго объявлСниС статичСского поля.

Π­Ρ‚ΠΈ контСксты конструктора ΡΠ²Π»ΡΡŽΡ‚ΡΡ СдинствСнными, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ readonly Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° out ΠΈΠ»ΠΈ ref.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово readonly отличаСтся ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова const. ПолС const ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ объявлСнии поля. ПолС readonly ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ нСсколько Ρ€Π°Π· Π² объявлСнии поля ΠΈ Π² любом конструкторС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, поля readonly ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ значСния Π² зависимости ΠΎΡ‚ использованного конструктора. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ»Π΅ const являСтся константой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции, ΠΏΠΎΠ»Π΅ readonly ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для констант Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈ использовании Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ сообщСниС ΠΎΠ± ошибкС компилятора:

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ доступному Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния полю допускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² конструкторС ΠΈ Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ ссылки Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния

БпСцификация языка C#

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² спСцификации языка C#. БпСцификация языка являСтся ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ источником ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ синтаксисС ΠΈ использовании языка C#.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с прСдлоТСниями языковых спСцификаций:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ReadOnly (Visual Basic)

Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная ΠΈΠ»ΠΈ свойство ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΎ, Π½ΠΎ Π½Π΅ записано.

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

ΠŸΡ€Π°Π²ΠΈΠ»Π°

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ объявлСния. ReadOnly ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ модуля. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ контСкст объявлСния для ReadOnly элСмСнта Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ классом, структурой ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ исходным Ρ„Π°ΠΉΠ»ΠΎΠΌ, пространством ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹. НСльзя ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ReadOnly вмСстС с Static Π² ΠΎΠ΄Π½ΠΎΠΌ объявлСнии.

ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ значСния. Код, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ReadOnly свойство, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Но ΠΊΠΎΠ΄, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ доступ ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² любоС врСмя.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ReadOnly Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΅Π΅ объявлСнии ΠΈΠ»ΠΈ Π² конструкторС класса ΠΈΠ»ΠΈ структуры, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.

Когда слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° объявлСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΊΠ°ΠΊ ByVal, Ρ‡Ρ‚ΠΎ Π½Π΅ позволяСт ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ сам Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π°, Π½ΠΎ позволяСт Π΅ΠΌΡƒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ‡Π»Π΅Π½Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ReadOnly ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… контСкстах:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Struct ΠΈ readonly: ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ падСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ИспользованиС Ρ‚ΠΈΠΏΠ° Struct ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° readonly ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ падСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. БСгодня ΠΌΡ‹ расскаТСм ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ этого ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄ΠΈΠ½ Open Source Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° β€” ErrorProne.NET.

Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π€ΠΎΡ‚ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ

Как Π²Ρ‹, вСроятно, Π·Π½Π°Π΅Ρ‚Π΅ ΠΈΠ· ΠΌΠΎΠΈΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ Β«The ‘in’-modifier and the readonly structs in C#Β» (Β«ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ in ΠΈ структуры readonly Π² C#Β») ΠΈ Β«Performance traps of ref locals and ref returns in C#Β» (Β«Π›ΠΎΠ²ΡƒΡˆΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ использовании Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ refΒ»), Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со структурами слоТнСС, Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ. ΠžΡΡ‚Π°Π²ΠΈΠ² Π² сторонС вопрос измСняСмости, Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ структур с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ readonly (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния) ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ Π² контСкстах readonly сильно различаСтся.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ структуры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ сцСнариСв, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ для эффСктивной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… скрытых опСрациях, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹Ρ… компилятором для обСспСчСния нСизмСнности структуры.

Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ прСдостСрСТСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ:

Π’ΠΎΡ‚ нСсколько ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. И, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опираСтся Π½Π° эти ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΡ‡Π΅Π½ΡŒ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΉ (Ρ‚. Π΅. измСнСния, вносимыС Π² ΠΊΠΎΠ΄, Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ сущСствСнныС измСнСния Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… частях ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².). Бколько Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ замСтят, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½Π° public readonly int X ; Π½Π° public int X < get; >Π² часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ структурС Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° readonly сущСствСнно влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ? Или насколько Π»Π΅Π³ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° in вмСсто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ? Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ использовании свойства in ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΊΠΎΠ³Π΄Π° защитная копия создаСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π’Π°ΠΊΠΈΠ΅ свойства структур Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π²Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². И Π·ΠΎΠ² Π±Ρ‹Π» ΡƒΡΠ»Ρ‹ΡˆΠ°Π½. ВстрСчайтС ErrorProne.NET β€” Π½Π°Π±ΠΎΡ€ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ вас ΠΎ возмоТности измСнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π΅Π³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со структурами.

Анализ ΠΊΠΎΠ΄Π° с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ сообщСний Β«Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ структуру X readonlyΒ»

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡƒΠ»ΠΎΠ²ΠΈΠΌΡ‹Ρ… ошибок ΠΈ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ влияния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ использовании структур β€” ΠΏΠΎ возмоТности ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… readonly. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly Π² объявлСнии структуры Ρ‡Π΅Ρ‚ΠΊΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (подчСркивая, Ρ‡Ρ‚ΠΎ структура нСизмСняСма) ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ компилятору ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пороТдСния Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… контСкстах, упомянутых Π²Ρ‹ΡˆΠ΅.

Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π€ΠΎΡ‚ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ

ОбъявлСниС структуры readonly Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ цСлостности ΠΊΠΎΠ΄Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Π΅Π· опасСний Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ фиксСр (процСсс исправлСния ΠΊΠΎΠ΄Π°) Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ всС структуры всСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ доступными Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

Π”Ρ€ΡƒΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ref readonly

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг β€” ΠΎΡ†Π΅Π½ΠΊΠ° бСзопасности использования Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй (ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° in, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ref readonly ΠΈ Ρ‚. ΠΏ.). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ компилятор Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ скрытыС Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ, способныС ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

МоТно Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ²:

Вторая катСгория β€” это структуры Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° readonly, Π½Π΅ содСрТащиС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ. Π’ этом случаС любой доступ ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ Π² контСкстС readonly Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ созданиС Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ.

ПослСдняя катСгория β€” это структуры с полями public ΠΈΠ»ΠΈ internal ΠΈ свойствами ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ public Π»ΠΈΠ±ΠΎ internal. Π’ этом случаС компилятор создаСт Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π°.

Π’Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ прСдупрСТдСния, Ссли «нСдруТСствСнная» структура пСрСдаСтся с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ in, сохраняСтся Π² локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ref readonly ΠΈ Ρ‚. Π΄.

Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ. Π€ΠΎΡ‚ΠΎ Π² объявлСнии поля ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ

Анализатор Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ прСдупрСТдСния, Ссли «нСдруТСствСнная» структура ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π΅ readonly, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π² этом случаС отсутствуСт. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ in ΠΈ ref readonly Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ с Ρ†Π΅Π»ΡŒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ создания ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ. Если структура Β«Π½Π΅Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½Π°Β» ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ этим ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ, Ρƒ вас Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности: ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ копию Π² локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ поля readonly Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΈΠ½Π°Ρ‡Π΅: Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ нСизмСняСмым, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти поля. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ясным ΠΈ элСгантным, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€” быстрым.

Анализ скрытых ΠΊΠΎΠΏΠΈΠΉ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ выполняСт ΠΌΠ½ΠΎΠ³ΠΎ дСйствий, скрытых ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Как Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, довольно слоТно ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° происходит созданиС Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ.

Анализатор выявляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ скрытыС ΠΊΠΎΠΏΠΈΠΈ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ выводят диагностичСскиС сообщСния, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры β‰₯16 Π±Π°ΠΉΡ‚.

ИспользованиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… структур ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, созданиС компилятором Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ сущСствСнно Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, это ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Но ΠΊΠ°ΠΊ эти явлСния ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ прилоТСния Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сквозного прохоТдСния?

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, я использовал ΠΈΡ… для Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²: ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Roslyn ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я сСйчас Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ прСдставляСт собой ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ТСсткими трСбованиями ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ); Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ для ясности Β«ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ DΒ».

ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΈ это, Ρ‡Ρ‚ΠΎ описанныС Π²Ρ‹ΡˆΠ΅ возмоТности бСсполСзны? ВовсС Π½Π΅Ρ‚.

Π Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ с высокими трСбованиями ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Π΄ Roslyn ΠΈΠ»ΠΈ Β«ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ DΒ») ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ большоС количСство людСй тратят массу Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ самом Π΄Π΅Π»Π΅, Π² рядС случаСв структуры Π² нашСм ΠΊΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈΡΡŒ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ref, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поля Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° readonly, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ роста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ структур с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ in ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π±Ρ‹Π» Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ Π½Π° критичСских путях Π΅Π³ΠΎ прохоТдСния отсутствуСт ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ структур.

Π§Ρ‚ΠΎ я Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ с этими возмоТностями?

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ вопрос использования ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° readonly для структур Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠ»Π³ΠΈΡ… Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ. Если структура нСизмСняСма, Ρ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly просто явно ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π΅Ρ‚ компилятор ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ. И отсутствиС Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… структур β€” просто бонус.

БСгодня ΠΌΠΎΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ²Ρ‹: Ссли структуру ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ readonly, Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ сдСлайтС Π΅Π΅ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ.

ИспользованиС Π΄Ρ€ΡƒΠ³ΠΈΡ… рассмотрСнных возмоТностСй ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΡŽΠ°Π½ΡΡ‹.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ оптимизация ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ пСссимизации?

Π“Π΅Ρ€Π± Π‘Π°Ρ‚Ρ‚Π΅Ρ€ (Herb Sutter) Π² своСй ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Β«Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ кодирования Π½Π° C++: 101 ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²ΠΎΠΉ ΠΎΠΏΡ‹Ρ‚Β» Π²Π²ΠΎΠ΄ΠΈΡ‚ понятиС Β«ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ пСссимизации».

Β«ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Ρ€Π°Π²Π½Ρ‹Ρ… условиях, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ эффСктивныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования ΠΈ ΠΈΠ΄ΠΈΠΎΠΌΡ‹ кодирования Π΄ΠΎΠ»ΠΆΠ½Ρ‹ СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΡ‚Π΅ΠΊΠ°Ρ‚ΡŒ с ΠΊΠΎΠ½Ρ‡ΠΈΠΊΠΎΠ² Π²Π°ΡˆΠΈΡ… ΠΏΠ°Π»ΡŒΡ†Π΅Π². Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ слоТнСС Π² написании, Ρ‡Π΅ΠΌ Π΅Π³ΠΎ пСссимизированныС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹. Π’Ρ‹ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Π° ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚Π΅ Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎΠΉ пСссимизации».

Π‘ ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ in β€” ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎΡ‚ самый случай. Если Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ структура ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Π»ΠΈΠΊΠ° (40 Π±Π°ΠΉΡ‚ ΠΈ Π±ΠΎΠ»Π΅Π΅), Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ всСгда ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π΅ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ in. Π¦Π΅Π½Π° использования ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° in ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π²Π΅Π»ΠΈΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ этом Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π° Π²Ρ‹Π³ΠΎΠ΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ.

Напротив, для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ readonly ref Π΄Π΅Π»ΠΎ обстоит ΠΈΠ½Π°Ρ‡Π΅. Π― Π±Ρ‹ сказал, Ρ‡Ρ‚ΠΎ эти возмоТности слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π° Π² ΠΊΠΎΠ΄Π΅ прилоТСния ΠΎΡ‚ Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π΅ выявит, Ρ‡Ρ‚ΠΎ опСрация копирования Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ). ИспользованиС этих возмоТностСй Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ вас Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий, Π° Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ ΠΊΠΎΠ΄Π° становится слоТнСС Π΅Π³ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

НаписаниС бСзопасного ΠΈ эффСктивного ΠΊΠΎΠ΄Π° C#

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

Π’ большСй части ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄Π° Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² C# 7.2. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ настроСн Π½Π° использованиС Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΉ вСрсии. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Настройка языковой вСрсии.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ использования Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ часто ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ выдСлСния памяти Π² ΠΊΡƒΡ‡Π°Ρ…. НСдостаток состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π­Ρ‚ΠΎΡ‚ компромисс услоТняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ…. Π―Π·Ρ‹ΠΊΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, описываСмыС Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ бСзопасный эффСктивный ΠΊΠΎΠ΄ с использованиСм ссылок Π½Π° Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ использовании этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ число ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ выдСлСния ΠΈ копирования.

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΈ выявлСнии ΡƒΠ·ΠΊΠΈΡ… мСст.

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ двумя цСлями:

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ количСства Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π² ΠΊΡƒΡ‡Π΅.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, содСрТат ссылку Π½Π° располоТСниС Π² памяти ΠΈ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² управляСмой ΠΊΡƒΡ‡Π΅. Бсылка копируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ссылочный Ρ‚ΠΈΠΏ пСрСдаСтся Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ возвращаСтся ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ распрСдСлСниС ΠΈ впослСдствии Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ освобоТдСн. Π‘Π±ΠΎΡ€ΠΊΠ° мусора Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя.

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ числа ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, нСпосрСдствСнно содСрТат ΠΈΡ… значСния, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ копируСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ возвращаСтся ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ значСния this ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ‡Π»Π΅Π½ΠΎΠ² Ρ‚ΠΈΠΏΠ° значСния. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ копирования Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Π² зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚ΠΈΠΏΠ°.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ структуры для объяснСния этих Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ:

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ этой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ.

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ нСизмСняСмыС структуры ΠΊΠ°ΠΊ readonly

Π­Ρ‚ΠΈΡ… Π΄Π²ΡƒΡ… ΠΏΡ€Π°Π²ΠΈΠ» достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· элСмСнтов readonly struct Π½Π΅ измСняСт состояниС этой структуры. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ struct являСтся нСизмСняСмым. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Point3D ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ нСизмСняСмая, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ этим рСкомСндациям, ΠΊΠΎΠ³Π΄Π° ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСизмСняСмый Ρ‚ΠΈΠΏ значСния. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ прСимущСством. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова readonly struct Ρ‡Π΅Ρ‚ΠΊΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ элСмСнты readonly для измСняСмых структур.

Рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся структура ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ вСрсия структуры ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ добавляСт ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ readonly Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‚Π΅ΠΌ элСмСнтам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ структуру. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ структуры Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠΆΠ½Ρ‹ прСимущСства Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· readonly для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ²:

ИспользованиС инструкций ref readonly return

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ свойства ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ссылкС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся статичСским элСмСнтом:

Π’Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ измСняли источник, поэтому слСдуСт Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ref readonly :

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ref readonly позволяСт ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… структур ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство Origin ΠΊΠ°ΠΊ ref readonly ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

Π‘ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова in C# прСдоставляСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ для выраТСния намСрСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Если Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная пСрСдаСтся ΠΏΠΎ ссылкС, прСдотвращая ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° in для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ ссылкС Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ ΠΎ своСм Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ ссылкС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ копирования. Π’Ρ‹ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² качСствС этого Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ in Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ со ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ»ΠΈ числовыми значСниями. Однако прСимущСства Π² этих случаях ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ (Ссли ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΅ΡΡ‚ΡŒ).

ИспользованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² in для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… структур

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСт расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС.

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС in Π½Π° сайтС Π²Ρ‹Π·ΠΎΠ²Π°

ΠŸΡ€ΠΎΠΏΡƒΡΠΊ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° in Π² мСстС Π²Ρ‹Π·ΠΎΠ²Π° сообщаСт компилятору, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ копию Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Π»Π΅Ρ‚ΡŒ компилятору ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΏΠΎ ссылкС, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ in для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² мСстС Π²Ρ‹Π·ΠΎΠ²Π°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅:

ИзбСганиС Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ

Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСмонстрируСт Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ BenchmarkDotNet Π² Π½Π°ΡˆΠΈΡ… рСпозиториях ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π° сайтС GitHub. Он сравниваСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ измСняСмых структур ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ ΠΏΠΎ ссылкС с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ нСизмСняСмых структур ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ ΠΏΠΎ ссылкС. БыстрСС всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ структуру ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ссылкС.

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ² ref struct

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ² nint ΠΈ nuint

ЦСлочислСнныС Ρ‚ΠΈΠΏΡ‹ собствСнного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° β€” это 32-разрядныС Ρ†Π΅Π»Ρ‹Π΅ числа Π² 32-разрядном процСссС ΠΈΠ»ΠΈ 64-разрядныС Ρ†Π΅Π»Ρ‹Π΅ числа Π² 64-разрядном процСссС. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… для сцСнариСв взаимодСйствия, с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΈ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² сцСнариях, Π³Π΄Π΅ часто Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ сводит ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ число ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ распрСдСлСния:

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это со ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π² Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ ситуациях:

Π§Ρ‚ΠΎΠ±Ρ‹ свСсти распрСдСлСния ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ, придСтся ΠΏΠΎΠΉΡ‚ΠΈ Π½Π° компромисс. Π’Ρ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚Π΅ большС памяти, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€ struct большС, Ρ‡Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ ссылки. Бсылка ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся 64- ΠΈΠ»ΠΈ 32-разрядной ΠΈ зависит ΠΎΡ‚ ЦП Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π­Ρ‚ΠΈ компромиссы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ минимальноС влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Однако для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… структур ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ возрастаСт. ВлияниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большим Π² ΠΏΠ»ΠΎΡ‚Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… путях для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *