какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Классов

Π‘ самого Π½Π°Ρ‡Π°Π»Π°, ΠΊΠΎΠ³Π΄Π° я Π½Π°Ρ‡ΠΈΠ½Π°Π» Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, вставал вопрос, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ быстродСйствия: структуру ΠΈΠ»ΠΈ класс; ΠΊΠ°ΠΊΠΈΠ΅ массивы Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ. По ΠΏΠΎΠ²ΠΎΠ΄Ρƒ структур, Apple привСтствуСт ΠΈΡ… использованиС, объясняя это Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ вся ΡΡƒΡ‚ΡŒ языка Swift β€” это структуры. Но Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚Π΅, ΠΊΡ‚ΠΎ с этим Π½Π΅ согласСн, вСдь ΠΌΠΎΠΆΠ½ΠΎ красиво ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, отнаслСдовав ΠΎΠ΄ΠΈΠ½ класс ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈ работая с Ρ‚Π°ΠΊΠΈΠΌ классом. Для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ с классами создавали Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ классы, ΠΈ Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ слоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ быстрСС.

Для расстановки всСх Ρ‚ΠΎΡ‡Π΅ΠΊ Π½Π° β€œΠ΅β€ я написал нСсколько тСстов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…: ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π° с массивами ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π“Ρ€ΠΎΠΌΠΊΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² я Ρ€Π΅ΡˆΠΈΠ» Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π΅ΡˆΠΈΡ‚ для сСбя сам, стоит Π»ΠΈ Π²Π΅Ρ€ΠΈΡ‚ΡŒ тСстам, смоТСт ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρƒ вас, ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ тСста. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π²Ρ‹ΠΉΠ΄ΡƒΡ‚ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΡˆΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π½Π΅ упомянул, ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ я просто Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π» ΠΎ Π½ΠΈΡ….

P.S. Π― Π½Π°Ρ‡ΠΈΠ½Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ ΡΡ‚Π°Ρ‚ΡŒΡ‘ΠΉ Π½Π° Xcode 10.3 ΠΈ Π±Ρ‹Π»ΠΎ Π΄ΡƒΠΌΠ°Π» ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ с Xcode 11, Π½ΠΎ всё ΠΆΠ΅ ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ ΠΏΡ€ΠΎ сравнСниС Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° ΠΎ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π― Π½Π΅ сомнСваюсь, Ρ‡Ρ‚ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ, ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, станСт быстрСС. Π’ ΠΈΡ‚ΠΎΠ³Π΅ я доТдался Π½ΠΎΠ²Ρ‹ΠΉ Swift 5.1 ΠΈ Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρ‹ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. ΠŸΡ€ΠΈΡΡ‚Π½ΠΎΠ³ΠΎ чтСния.

ВСст 1: Π‘Ρ€Π°Π²Π½ΠΈΠΌ массивы Π½Π° структурах ΠΈ классах

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ класс, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса Π² массив, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ дСйствиС Π½Π°Π΄ массивом β€” это ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ Π½Π΅ΠΌΡƒ Ρ†ΠΈΠΊΠ»ΠΎΠΌ.

Π’ массивС ΠΏΡ€ΠΈ использовании Π² Π½Ρ‘ΠΌ классов ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ увСличиваСтся количСство ссылок, послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ число ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ.

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

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом
Рис. 1: Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ получСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· массивов Π½Π° основС структур ΠΈ классов

ВСст 2. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠΌ ContiguousArray vs Array

Π§Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ интСрСсно β€” ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ массива (Array) с ссылочным массивом (ContiguousArray), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ c классами, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹ΠΌΠΈ Π² массивС.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаСв:

ContiguousArray, хранящий struct с value Ρ‚ΠΈΠΏΠΎΠΌ
ContiguousArray, хранящий struct с String
ContiguousArray, хранящий class с value Ρ‚ΠΈΠΏΠΎΠΌ
ContiguousArray, хранящий class с String
Array, хранящий struct с value Ρ‚ΠΈΠΏΠΎΠΌ
Array, хранящий struct с String
Array, хранящий class с value Ρ‚ΠΈΠΏΠΎΠΌ
Array, хранящий class с String

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстов (тСсты: ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ inline, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ c Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ inline, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ элСмСнту Π² Ρ†ΠΈΠΊΠ»Π΅) Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ большоС количСство ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… тСстов (для 8 массивов ΠΏΠΎ 5 тСстов), я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ†ΠΈΠΊΠ»ΠΎΠ² для массивов слуТит lazy ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΠΎ всСму массиву, Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ°ΠΏΠΎΠ² Π½Π°Π΄ элСмСнтами массива.

Π’ использовании структур Π² качСствС инструмСнта ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ свои ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ использованиС Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ: строки, словари, ссылочный массивы. Π’ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° пСрСмСнная, хранящая Π² сСбС ссылочный Ρ‚ΠΈΠΏ, поступаСт Π½Π° Π²Ρ…ΠΎΠ΄ Ρƒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, происходит созданиС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ссылки Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся классом. Π£ этого Π΅ΡΡ‚ΡŒ ΠΈ другая сторона, ΠΎ Π½Π΅ΠΉ Ρ‡ΡƒΡ‚ΡŒ дальшС. МоТно ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ΠΎΠ³Π΄Π° количСство ссылок ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ увСличится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ Π½Π΅Ρ‘, Π° количСство ссылок Π½Π° значСния Π²Π½ΡƒΡ‚Ρ€ΠΈ структуры останутся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌΠΈ. Π’ Ρ†Π΅Π»ΠΎΠΌ хочСтся ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ссылочного Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π² структурС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‘ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ снизилась Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ классов с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π’ сСти Π΅ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ β€œStop Using Structs!”, которая Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ вопрос ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° Π½Π΅Π³ΠΎ. Π― скачал ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Ρ€Π΅ΡˆΠΈΠ» Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π³Π΄Π΅ происходит, ΠΈ Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ структуры. Автор ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠ·ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ структур ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с классами, ΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ занятиС, Ρ‡Π΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, абсурдно (поэтому я ΡƒΠ±Ρ€Π°Π» строку, Π³Π΄Π΅ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚). Но Ссли ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π±ΡƒΠ΄Π΅ΠΌ просто ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ, Ρ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ нСсущСствСнная. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ставим inline(never) Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ обязано Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Ρ‘ ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Π° Π² строку. Будя ΠΏΠΎ тСстам, Apple сдСлала Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ модифицируСтся, для структур компилятор мСняСт ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ доступ ΠΊ Π½Π΅ ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π»Π΅Π½ΠΈΠ²Ρ‹ΠΌΠΈ. Π’ классС происходит Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, Π½ΠΎ Π·Π°ΠΎΠ΄Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ число ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ lazy, всС Π΅Π³ΠΎ поля Ρ‚Π°ΠΊΠΆΠ΅ lazy, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ½ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚. Π’ этом Ρƒ структур Π½Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹Ρ…: ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° структура лишь Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ уступаСт классу Π² скорости; ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ‚Ρ€Ρ‘Ρ… ΠΈ Π±ΠΎΠ»Π΅Π΅, структура всСгда Π±ΡƒΠ΄Π΅Ρ‚ быстрСС.

ВСст 3: Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ ΠΈ Классов хранящих большиС классы

Π’Π°ΠΊΠΆΠ΅ я Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» сам ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызывался ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° Π½Π΅ Π΄Π²Π΅, ΠΊΠ°ΠΊ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅), ΠΈ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ пСрСполнСния Int, Π·Π°ΠΌΠ΅Π½ΠΈΠ» ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π½Π° сумму ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅. Π”ΠΎΠ±Π°Π²ΠΈΠ» Π±ΠΎΠ»Π΅Π΅ понятныС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ это сСкунды, Π½ΠΎ Π½Π°ΠΌ это Π½Π΅ Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½ΠΎ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ), ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Darwin (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ зря, Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² тСстах Π΄ΠΎ/послС добавлСния Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π² ΠΌΠΎΡ‘ΠΌ тСстС Π½Π΅Ρ‚), Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ максимальной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π±ΠΈΠ»Π΄ Π½Π° Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠΉ сборкС (каТСтся, Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ чСстнСС), ΠΈ Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом
Рис. 2: ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ структур ΠΈ классов ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ β€œStop Using Structs”

Π Π°Π·Π½ΠΈΡ†Π΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… тСста Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹.

ВСст 4: Ѐункция, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Generic, Protocol ΠΈ функция Π±Π΅Π· Generic

Если Π²Π·ΡΡ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° Π΄Π²Π° значСния, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ сравнСния этих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (func min), Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… строк прСвратится Π² ΠΊΠΎΠ΄ ΠΈΠ· восьми (Ρ‚Π°ΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Apple). Но Ρ‚Π°ΠΊ Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ всСгда, Ρƒ Xcode Π΅ΡΡ‚ΡŒ способы ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, Ссли ΠΎΠ½ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² Π½Π΅Π³ΠΎ пСрСдаСтся Π΄Π²Π΅ структурных значСния, ΠΎΠ½ автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ Π΄Π²Π΅ структуры, ΠΈ ΡƒΠΆΠ΅ Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом
Рис. 3: Випичная Generic функция

Π― Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ обьявлСн Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Generic, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ просто Protocol. Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Swift 5.1 Protocol Π΄Π°ΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ Generic (Π΄ΠΎ Swift 5.1 ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Π±Ρ‹Π»ΠΈ Π² 2 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅), хотя ΠΏΠΎ вСрсии Apple всё Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π° Π²ΠΎΡ‚ ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ касаСтся ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ массиву, Π½Π°ΠΌ ΡƒΠΆΠ΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ замСдляСт Generic (Π½ΠΎ ΠΎΠ½ΠΈ всё Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠ»ΠΎΠ΄Ρ†Ρ‹, вСдь побыстрСС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ²):

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом
Рис. 4: Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Generic ΠΈ Protocol ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ВСст 5: Π‘Ρ€Π°Π²Π½ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Ρ€ΠΎΠ΄Π½ΠΎΠ³ΠΎ, Π° Π·Π°ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ final класс Π½Π° Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²

Π§Ρ‚ΠΎ мСня Ρ‚Π°ΠΊ ΠΆΠ΅ всСгда интСрСсовало, насколько ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ классы с большим число Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, насколько класс быстро Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ свои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ родитСля. Π’ случаях, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пытаСмся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ класс, вступаСт Π² ΠΈΠ³Ρ€Ρƒ динамичСская диспСтчСризация. Π§Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅? ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ пСрСмСнная, гСнСрируСтся сообщСниС, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, получая Ρ‚Π°ΠΊΠΎΠΉ запрос, Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ поиск ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ диспСтчСризации своСго класса, ΠΈ Ссли Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ override ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Π΅Ρ‘ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Π»ΠΈΠ±ΠΎ рСкурсивно Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом
Рис. 5: Π’Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² классов, для тСстирования диспСтчСризация

Из тСста Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ²: Ρ‡Π΅ΠΌ большС Ρƒ класса Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов, Ρ‚Π΅ΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Π»Π°, Ρ‡Ρ‚ΠΎ Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ смСло ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°Ρ‚ΡŒ, скорСС всСго ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° сдСлаСт Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² скорости Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСимущСства Ρƒ final ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° класса Π½Π΅Ρ‚, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρ€Π°Π±ΠΎΡ‚Π° класса Π΄Π°ΠΆΠ΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ это связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΎΠ½Π° Ρ‚Π°ΠΊ ΠΈ Π½Π΅ становится.

ВСст 6: Π’Ρ‹Π·ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ final ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ класса

Π’ΠΎΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ интСрСсныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ с присвоСниСм ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° final для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‡Π½ΠΎ знаСшь, Ρ‡Ρ‚ΠΎ пСрСмСнная Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ пСрСписана Π½ΠΈΠ³Π΄Π΅ Π² наслСдниках класса. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ final ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Если Π±Ρ‹ ΠΌΡ‹ Π² нашСм тСстС создали лишь ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ Ρƒ Π½Π΅Ρ‘ свойство, Ρ‚ΠΎΠ³Π΄Π° Π±Ρ‹ ΠΎΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ снизу). Если ΠΌΡ‹ ΠΏΠΎ-чСстному Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ замСдлится (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Π²Π΅Ρ€Ρ…Ρƒ):

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом
Рис. 6: Π’Ρ‹Π·ΠΎΠ² final ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ пошСл, ΠΈ ΠΎΠ½Π° всСгда ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ своСго ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π°.

ВСст 7: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² для структур. Или ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Existential container

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Ссли Π²Π·ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ нСсколько структур, наслСдуСмых ΠΎΡ‚ этого ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ наш компилятор, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ помСстим структуры с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΡ‘ΠΌΠ°ΠΌΠΈ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠ΄ΠΈΠ½ массив, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ?

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² наслСдниках, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Protocol Witness Table. Он создаСт структуры ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Existential container. Он Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² сСбС 5 ячССк ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, каТдая ΠΏΠΎ 8 Π±Π°ΠΉΡ‚. Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ‚Ρ€Ρ‘Ρ… выдСляСтся мСсто ΠΏΠΎΠ΄ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² структурС (Ссли ΠΎΠ½ΠΈ Π½Π΅ Π²Π»Π΅Π·Π°ΡŽΡ‚, Ρ‚ΠΎ ΠΎΠ½ создаСт ссылку Π½Π° ΠΊΡƒΡ‡Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранятся Π΄Π°Π½Π½Ρ‹Π΅), Π² Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ хранится информация ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² структурС, ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ ΠΎ способС управлСния этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π° пятой хранятся ссылки Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурой ΠΈ классом
Рис 7. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ содСрТит

ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ число ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ Π²Ρ‚Ρ€ΠΎΠ΅. Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΎΠ½ΠΈ хранятся Π² этом ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² скорости обусловлСна объСмом структуры. Π§Ρ‚ΠΎ интСрСсно, Ссли Π²Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ число ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ структурС, Ρ‚ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ измСнится, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² самом Π΄Π΅Π»Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ 3 ΠΈΠ»ΠΈ 2 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, для ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ особыС условия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сущСствСнно ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. Вторая структура идСально вписываСтся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ отличаСтся ΠΏΠΎ объСм ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Π² Π΄Π²Π° Ρ€Π°Π·Π°, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΡŽ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Π² сравнСнии с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ структурами.

НСмного Ρ‚Π΅ΠΎΡ€ΠΈΠΈ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

На ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ структур ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹:

Π§Π΅ΠΌ ΠΏΠ»ΠΎΡ…ΠΈ ΠΈ опасны классы ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со структурами

ΠœΡ‹ Π½Π΅ всСгда управляСм ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π°ΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Ссли ΠΌΡ‹ это Π΄Π΅Π»Π°Π΅ΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слоТно Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ (насоздавали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ вьюшки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€).

Они Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ быстрыС ΠΊΠ°ΠΊ структуры.

Если Ρƒ нас Π΅ΡΡ‚ΡŒ ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ ΠΌΡ‹ пытаСмся ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ стилС, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Race Condition Π² случаС, ΠΊΠΎΠ³Π΄Π° наш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… мСст (Π° это Π½Π΅ Ρ‚Π°ΠΊ слоТно, вСдь собранный с Xcode ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ всСгда Ρ‡ΡƒΡ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Store вСрсия).

Если ΠΌΡ‹ пытаСмся ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Race Condition, ΠΌΡ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ рСсурсов Π½Π° Lock’и Π½Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΡŠΠ΅Π΄Π°Ρ‚ΡŒ рСсурсы ΠΈ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя вмСсто быстрой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‡Π΅ΠΌ Ρ‚Π΅ ΠΆΠ΅ самыС, построСнныС Π½Π° структурах.

Если ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Π΅ΠΌ всС упомянутыС Π²Ρ‹ΡˆΠ΅ дСйствия Π½Π°Π΄ нашими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ (ссылками), Ρ‚ΠΎ Π²Π΅Π»ΠΈΠΊΠ° Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹Ρ… deadlock’s.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈΠ·-Π·Π° этого возрастаСт.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΊΠΎΠ΄Π° = большС Π±Π°Π³ΠΎΠ², всСгда!

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

Π― ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΈΠ· Ρ€Π°Π·Π° Π² Ρ€Π°Π· Π½Π΅ хочСтся, ΠΈ сводный ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ. Подводя Ρ‡Π΅Ρ€Ρ‚Ρƒ ΠΏΠΎΠ΄ тСстами, хочСтся Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

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

ΠšΠ»Π°ΡΡΡ‹ ΠΈΠ»ΠΈ структуры, Π² Ρ‡Π΅ΠΌ отличия

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс ΠΈΠ»ΠΈ структуру, рассмотрим различия ΠΌΠ΅ΠΆΠ΄Ρƒ структурами ΠΈ классами. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ см. здСсь.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ синтаксичСски ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° классы, Π½ΠΎ сущСствуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ класс – являСтся ссылочным Ρ‚ΠΈΠΏΠΎΠΌ (reference type), Π° структуры – Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ (value type) (см. ΡΡ‚Π°Ρ‚ΡŒΡŽ Β«Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…Β«). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, классы всСгда ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ β€œΠΊΡƒΡ‡Π΅β€ (heap), Π° структуры ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² стСкС (stack).

Но это справСдливо Π² ΠΎΡ‡Π΅Π½ΡŒ простых случаях, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ структур ΠΈ классов: структуры, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π² спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ), ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов β€” ΠΏΠΎ ссылкС. ИмСнно это являСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π² ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ, Π° Π½Π΅ Ρ‚ΠΎ, Π³Π΄Π΅ ΠΎΠ½ΠΈ хранятся. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: структуру Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠΎ ссылкС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ out ΠΈ ref.

Π§Π΅ΠΌ большС Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры вмСсто ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… классов, Ρ‚Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΏΠΎ рСсурсам Π±ΡƒΠ΄Π΅Ρ‚ использованиС памяти.

Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ классы, структуры ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ поля, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ конструкторы. О конструкторах структур ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, ΠΈΠ±ΠΎ это Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ ΠΏΡ€ΠΈ сравнивании классов ΠΈ структур.

ΠœΡ‹ выяснили, Ρ‡Ρ‚ΠΎ всС встроСнныС Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ структурами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, числовыС Ρ‚ΠΈΠΏΡ‹ int, long, float ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ структурами System.Int32, System.Int64 ΠΈ System.Single соотвСтствСнно. Π­Ρ‚ΠΈ структуры ΠΈΠΌΠ΅ΡŽΡ‚ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠœΡ‹ ΡƒΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… этих Ρ‚ΠΈΠΏΠΎΠ². НапримСр, каТдая ΠΈΠ· пСрСчислСнных структур ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString( ). Π’Π°ΠΊΠΆΠ΅ Ρƒ пСрСчислСнных структур Π΅ΡΡ‚ΡŒ статичныС поля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Int32.MaxValue ΠΈΠ»ΠΈ Int32.MinValue. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ использовали структуры.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ классов, использованиС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π² структурах Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ сущСствуСт способа контролирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Π½ΠΈΡ…. НапримСр, ΠΊΡ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΡƒΡ‚ ΠΈΠ»ΠΈ сСкунд Π±ΠΎΠ»Π΅Π΅ 60. Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойства, Π° Π² конструкторС ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ число часов: 6 (остаток ΠΎΡ‚ дСлСния 30 Π½Π° 24).
Π—Π°ΠΌΠ΅Π½ΠΈΠΌ конструктор Time(…) конструктором Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ сообщСниС ΠΎΠ± ошибкС:
Β«Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ явных конструкторов Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²Β»

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° возникновСния ошибки Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) для структуры, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ компилятор всСгда Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ сам.

Π§Ρ‚ΠΎ ΠΆΠ΅ касаСтся класса, Ρ‚ΠΎ компилятор создаСт конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π’Ρ‹ Π΅Π³ΠΎ Π½Π΅ создали. ΠŸΡ€ΠΈ объявлСнии класса Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct Π½Π° class, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” 7).

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ экспСримСнт. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ снова class Π½Π° struct ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ конструктор Time(). ЗапуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ – 0. Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ прСдупрСТдСния Ρ‚ΠΈΠΏΠ°:
«Полю Β«ConsoleApplication1.Time.hoursΒ» Π½ΠΈΠ³Π΄Π΅ Π½Π΅ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, поэтому ΠΎΠ½ΠΎ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0Β».

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» сгСнСрирован конструктор (Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) для структуры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда устанавливаСт поля Π² 0, false ΠΈΠ»ΠΈ null (для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) – ΠΊΠ°ΠΊ ΠΈ для классов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ созданная структура всСгда Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎ Π² соотвСтствии со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ….

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

Однако Ссли Π² этом конструкторС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, компилятор Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π”Π²Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° структур

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

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ структуры: НСльзя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΎΠΌ мСстС, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ классов ΠΈ структур Π² сТатом Π²ΠΈΠ΄Π΅:

Π’ΠΎΠΏΡ€ΠΎΡΠ‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠšΠ»Π°ΡΡ
Какого ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°?Π—Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ (value) типБсылочный (reference) Ρ‚ΠΈΠΏ
Π“Π΄Π΅ β€œΠΆΠΈΠ²ΡƒΡ‚β€ экзСмпляры этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²?ЭкзСмпляры структуры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ значСниями ΠΈ β€œΠΆΠΈΠ²ΡƒΡ‚β€ ΠΎΠ½ΠΈ Π² стСкС (stack).ЭкзСмпляры классов Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ β€œΠΆΠΈΠ²ΡƒΡ‚β€ ΠΎΠ½ΠΈ Π² ΠΊΡƒΡ‡Π΅ (heap).
МоТно Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?НСтДа
Если создаСтся свой конструктор, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?ДаНСт
Если Π² своём конструкторС Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поля, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ компилятором?НСтДа
Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΈΡ… ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚?НСтДА

Поля структуры ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ использовании конструктора (Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new), ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ «собствСнного» ΠΈΠ»ΠΈ Β«ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ».

К особСнностям структур ΠΌΠΎΠΆΠ½ΠΎ отнСсти Π΅Ρ‰Π΅ ΠΈ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ вслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ структуры ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ структуру Π±Π΅Π· использования конструктора, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, пСрСмСнная t создаСтся, Π½ΠΎ поля Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ конструктором (Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Time t = new Time();). ΠŸΡ€Π°Π²Π΄Π°, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ поля структуры придСтся ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ public.

ЗамСчания, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ стоит ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ):

1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ структуры, это ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ‚ΠΎΠ½Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C#, хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры, прСдпочитая классы.

2. ДополнСния: структуры Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ абстрактными, структуры Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ дСструкторов, структуры Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ наслСдованиС.

3. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ структур ΠΈ классов: структуры ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ), ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов β€” ΠΏΠΎ ссылкС. ИмСнно это являСтся сущСствСнным Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π² ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ, Π° Π½Π΅ Ρ‚ΠΎ, Π³Π΄Π΅ ΠΎΠ½ΠΈ хранятся.

4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠΎ ссылкС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ out ΠΈ ref.

ΠžΡ‚Π²Π΅Ρ‚: 400016 Π±Π°ΠΉΡ‚. ΠšΠΎΠ½Π΅Ρ† примСчания.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ послС обсуТдСния структур ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ массивов β€” Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… конструкций Π΄Π°Π½Π½Ρ‹Ρ…, всСгда Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π² управляСмой ΠΊΡƒΡ‡Π΅ ΠΈ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

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

C# NET: Class vs Struct ΠΈΠ»ΠΈ Π² Ρ‡Ρ‘ΠΌ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Классом ΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΎΠΉ

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎ NET | создано: 10.07.2011 | ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ: 10.07.2011 | ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ: 08.11.2021 | просмотров: 89267 | ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²: 30

МнС Π² послСднСС врСмя ΠΎΡ‡Π΅Π½ΡŒ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ программисты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ β€œΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉβ€ ΠΆΠΈΠ·Π½ΠΈ структуры (struct), Π½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎΠ± этом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. И Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, для простоты своСй “ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ” ΠΆΠΈΠ·Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ всСгда классы (class). Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° различиях ΠΌΠ΅ΠΆΠ΄Ρƒ структурами ΠΈ классами.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ struсture?

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡΡ‚Π°Ρ‚ΡŒΠΈ: Π§Π΅ΠΌ большС Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры вмСсто Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… (Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ – ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…) классов, Ρ‚Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΏΠΎ рСсурсам Π±ΡƒΠ΄Π΅Ρ‚ использованиС памяти. БмСю ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ трСбуСтся объяснСния почСму… β€œΠΊΡƒΡ‡Π°β€, β€œΡΠ±ΠΎΡ€Ρ‰ΠΈΠΊ мусора”, β€œΠ½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ прохода”, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€œΡ€ΡƒΡ‡Π½ΠΎΠ³ΠΎβ€ управлСния ΠΊΡƒΡ‡Π΅ΠΉ ΠΈ сборщиком мусора. ВсС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΡƒΠΆΠ΅ пСрСчислСны.

Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ классы, структуры ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ поля, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ конструкторы. Π₯отя ΠΏΡ€ΠΎ конструкторы Π½Π°Π΄ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ (Π±ΡƒΠ΄Π΅Ρ‚ дальшС ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅), ΠΈΠ±ΠΎ это Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ понятиС ΠΏΡ€ΠΈ сравнивании классов ΠΈ структур.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ всСгда с ВамиНС хочСтся Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ информация, для Вас ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠΌ. Π’ языкС C# ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ числовыС Ρ‚ΠΈΠΏΡ‹ int, long, float ΡΠ²Π»ΡΡŽΡ‚ΡΡ альясами для структур System.Int32, System.Int64 ΠΈ System.Single соотвСтствСнно. Π­Ρ‚ΠΈ структуры ΠΈΠΌΠ΅ΡŽΡ‚ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, каТдая ΠΈΠ· пСрСчислСнных структур ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString. Π’Π°ΠΊΠΆΠ΅ Ρƒ пСрСчислСнных структур Π΅ΡΡ‚ΡŒ статичныС поля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Int32.MaxValue ΠΈΠ»ΠΈ Int32.MinValue. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π’Ρ‹ ΡƒΠΆΠ΅ Π² повсСднСвной “ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ” ΠΆΠΈΠ·Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ структуры, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π½ΠΈΠΌΠΈ.

Π’Π°Π±Π»ΠΈΡ†Π° классов ΠΈ структур Π² Microsoft. NET Framework

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π°Π»ΡŒΡΡΡ‹ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ Ρ‚ΠΈΠΏΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π½Π° информация ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Ρ‚ΠΈΠΏΠ΅ (структура ΠΈΠ»ΠΈ класс).

KeywordType equivalentClass or structure
boolSystem.BooleanStructure
byteSystem.ByteStructure
decimalSystem.DecimalStructure
doubleSystem.DoubleStructure
floatSystem.SingleStructure
intSystem.Int32Structure
longSystem.Int64Structure
objectSystem.ObjectClass
sbyteSystem.SByteStructure
shortSystem.Int16Structure
stringSystem.StringClass
uintSystem.UInt32Structure
ulongSystem.UInt64Structure
ushortSystem.UInt16Structure

ОбъявлСниС структур

Для объявлСния структуры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово struct, слСдом Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ структуры ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки:

ΠšΡΡ‚Π°Ρ‚ΠΈ, β€¦ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² Π’Π°ΡˆΠΈΡ… структурах. НапримСр, Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния (==) ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅ Π΅ΠΌΡƒ (!=) Π½Π° своих структурах. Однако, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ явно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для своих структур.

И Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурами ΠΈ классами

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ Π·Π°Π»ΠΎΠΆΠ΅Π½Π° ошибка:

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибки Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) для структуры, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ компилятор всСгда Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ сам. Π§Ρ‚ΠΎ ΠΆΠ΅ касаСтся класса, Ρ‚ΠΎ компилятор создаСт конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π’Ρ‹ Π΅Π³ΠΎ Π½Π΅ создали. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ конструктор для структуры всСгда устанавливаСт поля Π² 0, false ΠΈΠ»ΠΈ null – ΠΊΠ°ΠΊ ΠΈ для классов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ созданная структура всСгда Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя β€œΠ°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎβ€ Π² соотвСтствии со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…. Если Π’Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля своими значСниями Π² конструкторС с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Однако, Ссли Π² этом конструкторС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, компилятор Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Вас ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹: ВсСгда всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹!

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

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹: НСльзя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² мСстС ΠΈΡ… объявлСния!

Данная Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄Π΅ ΠΏΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΠ²Π°Π΅Ρ‚ всё Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ основныС отличия ΠΌΠ΅ΠΆΠ΄Ρƒ классами ΠΈ структурами.

Π’ΠΎΠΏΡ€ΠΎΡΠ‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠšΠ»Π°ΡΡ
И ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°?Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ (value) Ρ‚ΠΈΠΏΠšΠ»Π°ΡΡ ссылочный (reference) Ρ‚ΠΈΠΏ
А Π³Π΄Π΅ β€œΠΆΠΈΠ²ΡƒΡ‚β€ экзСмпляры этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²?ЭкзСмпляры структуры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ значСниями ΠΈ β€œΠΆΠΈΠ²ΡƒΡ‚β€ ΠΎΠ½ΠΈ Π² стСкС (stack).ЭкзСмпляры классов Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ β€œΠΆΠΈΠ²ΡƒΡ‚β€ ΠΎΠ½ΠΈ Π² ΠΊΡƒΡ‡Π΅ (heap).
МоТно Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?НСтДа
Если создаСтся свой конструктор Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?ДаНСт
Если Π² своём конструкторС Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поля, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ компилятором?НСтДа
Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² мСстС ΠΈΡ… объявлСния?НСтДа

ИспользованиС структур ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π’Ρ‹ создали структуры, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ классы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹. НапримСр, создав структуру Time, я ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² классС:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ nullable Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° структуры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€œ?” ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null:

Time? currentTime = null;

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ структур

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π½Π΅ Ρ€Π°Π· Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ поля структуры ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ использования конструктора, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ β€œΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΠ³ΠΎβ€ ΠΈΠ»ΠΈ β€œΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽβ€. К особСнностям структур ΠΌΠΎΠΆΠ½ΠΎ отнСсти Π΅Ρ‰Π΅ ΠΈ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ вслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ структуры ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ структуру Π±Π΅Π· использования конструктора, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, пСрСмСнная создаСтся, Π½ΠΎ поля Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² соотвСтствии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ конструктора.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ структуры, это ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ‚ΠΎΠ½Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C# ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ±ΡƒΠ΄Π΅Ρ‚ с Π’Π°ΠΌΠΈ сила… структур. Π¦ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· коммСнтария: “Π‘ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ согласСн. МногиС маститыС Π·Π°ΠΏΠ°Π΄Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры, прСдпочитая классы. Π₯отя, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠ»ΠΈΡ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ… ΠΈ ΠΈΡ… ΠΌΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ стоит, Π»ΡƒΡ‡ΡˆΠ΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ своСй Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ.”

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

Leave a Reply

Your email address will not be published. Required fields are marked *