Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

ΠžΠ±Π·ΠΎΡ€ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ API

Π’ большСй части этого курса ΠΌΡ‹ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΠ»ΠΈΡΡŒ Π½Π° REST API. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим API-интСрфСйсы Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΎΠ»Π΅Π΅ распространСны ΠΏΡ€ΠΈ создании Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° устройства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, устройства Android ΠΈΠ»ΠΈ iOS). ПониманиС API-интСрфСйсов Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΆΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ API-интСрфСйсы REST.

Π₯арактСристики Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ API

НативныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ API-интСрфСйсы (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ API Π½Π° основС классов ΠΈΠ»ΠΈ просто API) Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

Π’ этом ΠΌΠΎΠ΄ΡƒΠ»Π΅ сосрСдоточимся Π½Π° Java API, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈΠ· самых распространСнных. Однако ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· упомянутых здСсь ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΈ соглашСний ΠΎ ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языкам с нСбольшими отличиями.

НуТно Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ программистом для докумСнтирования Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ API

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, тСхничСскому ΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŽ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ программистом. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ минимальноС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ языка. ВСхничСскиС писатСли ΠΌΠΎΠ³ΡƒΡ‚ внСсти здСсь большой Π²ΠΊΠ»Π°Π΄ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ стиля, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ясности, ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠ±Ρ‰Π΅Π³ΠΎ профСссионализма.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Π°Π²Ρ‚ΠΎΡ€Π° ΠΊ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈΡŽ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ API

БущСствуСт мноТСство ΠΊΠ½ΠΈΠ³ ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½-рСсурсов, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ язык программирования. Π’ этом ΠΌΠΎΠ΄ΡƒΠ»Π΅ курса Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ всСстороннСго изучСния Java. Однако, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ API Java (которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Javadoc ), понадобится Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Java.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ API, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Java. Π˜Π·ΡƒΡ‡ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ части Java, просмотрСв ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Javadoc ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π² основныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ

Java Development Kit (JDK)

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π½Π΅ установлСна Π»ΠΈ ΡƒΠΆΠ΅ JDK Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅:

Если JDK установлСна, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сообщСниС:

Если JDK Π½Π΅ установлСн, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ JDK здСсь. Надо Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Java ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Eclipse IDE for Java Developers

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Eclipse настроСн для использования вСрсии 1.8, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Eclipse> Preferences, Π° Π·Π°Ρ‚Π΅ΠΌ Java> Installed JREs.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

Если 1.8 Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ установки (На MacOS это /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home ) ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π΅Π΅.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Java Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² контСкстС Eclipse, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Windows Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Java Π² ΠΈΡ… ΠΏΡƒΡ‚ΡŒ ΠΊ классам. Но Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Java ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚ΠΎΠ³Π΄Π° это Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

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

Мобильная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Cross-platform ΠΈΠ»ΠΈ Native

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π― Π˜Π³ΠΎΡ€ΡŒ Π’Π΅Π΄Π΅Π½Π΅Π΅Π², Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² AGIMA. ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΈ кроссплатформСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. РаньшС я ΠΏΠΎ большСй части скСптичСски относился ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ: Π½Π΅ устраивало качСство ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Однако Π·Π° послСдний Π³ΠΎΠ΄ Ρ‚Π΅ΠΌΠΏΡ‹ развития кроссплатформСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΡƒΠΆΠ΅ Π½Π΅ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ своС ΠΌΠ½Π΅Π½ΠΈΠ΅ насчСт Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π· сравним самыС популярныС кроссплатформСнныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

На всякий случай

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная ΠΈ кроссплатформСнная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°:

нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (2 нСзависимых прилоТСния Π½Π° языках Swift ΠΈ Kotlin);

кроссплатформСнная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° β€” общая кодовая Π±Π°Π·Π° для iOS ΠΈ Android (с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² Flutter ΠΈΠ»ΠΈ React Native (Π΄Π°Π»Π΅Π΅ RN)).

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ способа Π΅ΡΡ‚ΡŒ свои особСнности, ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы. БоотвСтствСнно, ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ†Π΅Π»ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…. БСйчас объясню, ΠΊΠ°ΠΊ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° β€” это классичСский способ создания прилоТСния для iOS ΠΈ Android. ВСдСтся ΠΎΠ½Π° с использованиСм инструмСнтов ΠΈ языков программирования, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Π΅Π½Π΄ΠΎΡ€Π°ΠΌΠΈ β€” Apple ΠΈ Google. Π―Π·Ρ‹ΠΊΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” Swift (iOS) ΠΈ Kotlin (Android), Π° инструмСнтов для профилирования ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ.

Однако ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Π΄Π²Π° нСзависимых прилоТСния. Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. КаТдоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΡ‡Ρƒ ΠΏΠΎ-своСму, ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ свои Π±Π°Π³ΠΈ. И самоС Π³Π»Π°Π²Π½ΠΎΠ΅, нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ дСнСтся: ΠΏΠΎΠΊΠ° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ iOS ΠΈ Android, Apple ΠΈ Google Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ инструмСнтарий для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ самоС качСствСнноС ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π²Π·Π°ΠΌΠ΅Π½ придСтся Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ всё 2 Ρ€Π°Π·Π° ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ прилоТСния соотвСтствовали Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ.

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

ΠŸΠ»ΡŽΡΡ‹ ΠΈ минусы Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

2 нСзависимых прилоТСния

Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

МСньшС потрСбляСмых рСсурсов*

Π‘ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ инструмСнтарий для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π¨ΠΈΡ€ΠΎΠΊΠΈΠΉ Ρ€Ρ‹Π½ΠΎΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

ΠšΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

ΠšΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈ Π½Π° iOS, ΠΈ Π½Π° Android. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, это всё Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ, запустив Π΅Π³ΠΎ, ΠΌΡ‹ сразу проваливаСмся Π² ΠΌΠΈΡ€ Flutter ΠΈΠ»ΠΈ RN, ΠΈ всё происходит ΡƒΠΆΠ΅ Ρ‚Π°ΠΌ. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Flutter/RN ΠΈΠ΄Π΅Ρ‚ быстрСС. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ 1 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вмСсто 2-Ρ…, Π° Π΅Ρ‰Π΅ ΠΈ Π·Π° счСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² частности UI.

Но, ΡƒΠ²Ρ‹, Π½Π΅ всё Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ: кроссплатформа ΠΈΠΌΠ΅Π΅Ρ‚ ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для своСго прилоТСния. React Native ΠΈ Flutter всё ΠΆΠ΅ сторонниС Open Source-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Π±Π°Π³ΠΈ. НовыС Ρ„ΠΈΡˆΠΊΠΈ iOS ΠΈ Android Ρ‚Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ Ρ‚Π°ΠΊ быстро, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ…. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ².

Π’Π°ΠΊΠΆΠ΅, довольно часто придСтся ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° сторонниС Open Source-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ нСсСт Π² сСбС риски ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ вСрсии Flutter/RN. НС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ сущСствуСт Π² ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅, ΠΈ Ρ‚ΠΎΠ³Π΄Π° придСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ всё с нуля самому. Π’Π°ΠΊΠΆΠ΅ нСльзя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для iOS-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° часы. Π­Ρ‚ΠΎ касаСтся ΠΈ Flutter, ΠΈ RN.

Π’ΠΎ Π΅ΡΡ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„ΠΈΡ‡ придСтся Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ смСшСнию Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Как ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ. Как максимум β€” ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² кроссплатформСнный ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Если Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ, это Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈ Π²ΠΎ Flutter, ΠΈ Π² RN. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ, скаТСм, это Π½Π΅ Ρ‚ΠΎ, для Ρ‡Π΅Π³ΠΎ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ эти Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ достаточно Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ срСду, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ кроссплатформСнныС прилоТСния Π±ΠΎΠ»Π΅Π΅ рСсурсоСмкими ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊ процСссору/ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²ΠΊΠ΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°.

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ΅ использованиС Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… возмоТностСй Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, взаимодСйствия с ОБ, Ρ‚ΠΎ я Π±Ρ‹ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ кроссплатформу β€” Π΅ΡΡ‚ΡŒ риск, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ станСт ΠΎΡ‡Π΅Π½ΡŒ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ ΠΌΡ‹ упрСмся Π² ограничСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈΠ»ΠΈ самого Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°. Π•Ρ‰Π΅ стоит ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ UI, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ Π½Π° этом ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅ прСдставлСны Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСста с простым списком с изобраТСниями: Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‡ΠΈΡΡ‚ΡƒΡŽ. Π”Π°, Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Ρ… модСлях Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Ρ€Π°Π·Π½ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… тСстов Ρ‚ΡƒΡ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

Если ΠΏΡ€ΠΎΡ‰Π΅, Ρ‚ΠΎ кроссплатформа позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠ΅ сроки. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ-Π²ΠΈΡ‚Ρ€ΠΈΠ½ услуг ΠΈΠ»ΠΈ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² срСднСго/ΠΌΠ°Π»ΠΎΠ³ΠΎ объСма Π±Π΅Π· ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ³ΠΎ использования ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… возмоТностСй. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΡΠ½ΡΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΊΡƒ Π½Π° Π°Π²Π°Ρ‚Π°Ρ€ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QR-ΠΊΠΎΠ΄ Π½Π΅ составит Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ, Ссли Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

ΠŸΠ»ΡŽΡΡ‹ ΠΈ минусы кроссплатформСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

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

.NET-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π° C++/CLI

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ для Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ DLL ΠΈΠ»ΠΈ интСграция Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ?

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Visual C++ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π² управляСмый ΠΊΠΎΠ΄ [ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π³Π»Π°Π²Π΅ 7 ΠΊΠ½ΠΈΠ³ΠΈ]. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π·Π°Ρ‚Π΅Π΅ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° ΠΎΠ΄Π½Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ мСньшС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π²Ρ‹ интСгрируСтся ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ Π² DLL, Ρ‚ΠΎ клиСнтском ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π΅ придётся Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ лишнюю Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π§Π΅ΠΌ мСньшС загруТаСтся DLL, Ρ‚Π΅ΠΌ мСньшС врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, трСбуСтся мСньшС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти, мСньшС Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Π° Π² памяти ΠΈΠ·-Π·Π° нСвозмоТности Π΅Ρ‘ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ адрСсу.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ Π² ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ нСсёт ΠΏΠΎΠ»ΡŒΠ·Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ, слСдуСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сборку статичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ DLL.

Как Π±Ρ‹ странно это Π½Π΅ Π·Π²ΡƒΡ‡Π°Π»ΠΎ, Π½ΠΎ управляСмыС Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Однако это Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»Π΅Ρ‡ΡŒ Π·Π° собой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ идСнтичности Ρ‚ΠΈΠΏΠΎΠ². Π‘Π±ΠΎΡ€ΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Ρ‚ΠΈΠΏ, являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, CLR ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… сборок, Π΄Π°ΠΆΠ΅ Ссли ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ² ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚. Если Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ управляСмый Ρ‚ΠΈΠΏ ΠΈΠ· статичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚ΠΎ этот Ρ‚ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ скомпонован Π² ΠΎΠ±Π΅ сборки. Π’Π°ΠΊ ΠΊΠ°ΠΊ сборка являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ получится Π΄Π²Π° Ρ‚ΠΈΠΏΠ° с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, хотя ΠΎΠ½ΠΈ ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ статичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ управляСмых Ρ‚ΠΈΠΏΠΎΠ² Π² Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ DLL Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ рСкомСндуСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ CLR 2.0 Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π”Π°ΠΆΠ΅ Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, обращаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ потрСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π±Ρ‹Π»Π° установлСна CLR 2.0, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΡŽΡŽ Π²Π΅Ρ€ΡΠΈΡŽ CLR.

Какая Ρ‡Π°ΡΡ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ доступна Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ?

Как это часто Π±Ρ‹Π²Π°Π΅Ρ‚, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π—Π½Π°ΡŽ, это Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· второсортной ΠΊΠ½ΠΈΠΆΠ΅Π½Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° 90Ρ…, Π½ΠΎ для ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ постановка Π·Π°Π΄Π°Ρ‡ΠΈ особСнно Π²Π°ΠΆΠ½Π°.

Когда Π²Ρ‹ приступаСтС ΠΊ созданию ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ для Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π·Π°Π΄Π°Ρ‡Π° каТСтся ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ β€” Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈ управляСмоС API Π΄ΠΎΠ»ΠΆΠ½ΠΎ принСсти Π΅Ρ‘ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² ΠΌΠΈΡ€ управляСмого ΠΊΠΎΠ΄Π°.

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

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ Π½Π°Π΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Ρ†Π΅Π»ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‘Ρ‚ΠΊΠΎ, Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π° вопроса:

Π­Ρ‚ΠΎ API Π΄Π°Ρ‘Ρ‚ программисту ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности:

Однако вСсьма вСроятно, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π½ΡƒΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Если ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° для этого API Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ наслСдованиС, Ρ‚ΠΎ Π΅Ρ‘ созданиС упрощаСтся. Π‘ Ρ‚Π°ΠΊΠΈΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ Π²Π°ΠΌ Π½Π΅ придётся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ для абстрактного класса CryptoAlgorithm. Π‘ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Encrypt ΠΈ Decrypt ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ наслСдованиС, достаточно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ для SampleCipher ΠΈ AnotherCipherAlgorithm ΠΊΠ°ΠΊ sealed классы.

ВзаимодСйствиС языков

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ CLSCompliantAttribute, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ‡Π»Π΅Π½ ΠΊΠ°ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ CLS. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ этим Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΡ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ CLS. Если Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сборки, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС Ρ‚ΠΈΠΏΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ CLS. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΊ сборкам ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌ:

Богласно ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ 11 CLS всС Ρ‚ΠΈΠΏΡ‹, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² сигнатурах Ρ‡Π»Π΅Π½ΠΎΠ² класса (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², свойств, ΠΏΠΎΠ»Π΅ΠΉ ΠΈ событий), Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… снаруТи сборки, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ CLS. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ [CLSCompliant], Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° CLS. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ соотвСтствиС CLS, Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ сборки, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ объявлСн Ρ‚ΠΈΠΏ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ самого Ρ‚ΠΈΠΏΠ°.

Π’ Framework Class Library (FCL) Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ CLSCompliant. mscorlib ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ FCL ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ [CLSCompliant(true)] Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сборки ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ CLS, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ [CLSCompliant(false)].

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π² mscorlib ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Π½Π΅ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ CLS: System::SByte, System::UInt16, System::UInt32 ΠΈ System::UInt64. Π­Ρ‚ΠΈ Ρ‚ΠΈΠΏΡ‹ (ΠΈΠ»ΠΈ эквивалСнтныС ΠΈΠΌ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ² char, unsigned short, unsigned int, unsigned long ΠΈ unsigned long long Π² C++) нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² сигнатурах Ρ‡Π»Π΅Π½ΠΎΠ² Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ CLS.

Если Ρ‚ΠΈΠΏ считаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ CLS, Ρ‚ΠΎ всС Π΅Π³ΠΎ Ρ‡Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, Ссли явно Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

К соТалСнию, компилятор C++/CLI Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ CLS, Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° CLS. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ CLS ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π½Π°Π΄ΠΎ Π·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° CLS:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C#, Π² C++/CLI допускаСтся явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ значСния. НапримСр:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ для классов C++

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ управляСмый класс с ΠΏΠΎΠ»Π΅ΠΌ Ρ‚ΠΈΠΏΠ° NativeLib::SampleCipher нСльзя [ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π³Π»Π°Π²Π΅ 8 ΠΊΠ½ΠΈΠ³ΠΈ]. Π’Π°ΠΊ ΠΊΠ°ΠΊ поля управляСмых классов ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ указатСлями Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ Ρ‚ΠΈΠΏΠ° NativeLib::SampleCipher*. ЭкзСмпляр Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ класса Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан Π² конструкторС ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ Π² дСструкторС.

ΠšΡ€ΠΎΠΌΠ΅ дСструктора, Ρ‚Π°ΠΊΠΆΠ΅ стоит Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ [ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π³Π»Π°Π²Π΅ 11 ΠΊΠ½ΠΈΠ³ΠΈ].

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π½Π° Ρ‚ΠΈΠΏΡ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ CLS

Если Π² Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаётся ссылка C++ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ с сСмантикой ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ ссылкС, Ρ‚ΠΎ Π² ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ссылку [см. ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅]. Допустим, нативная функция ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Для Π²Ρ‹Π·ΠΎΠ²Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ трСбуСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ссылку Π½Π° int. Для этого Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΌΠ°Ρ€ΡˆΠ°Π»Π»ΠΈΠ½Π³ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ· ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ссылки Π² Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ссылку Π½Π΅ сущСствуСт. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сущСствуСт стандартноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ· int Π² int&, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ локальная пСрСмСнная Ρ‚ΠΈΠΏΠ° int, которая слуТит Π² качСствС Π±ΡƒΡ„Π΅Ρ€Π° для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ ссылкС. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΡ„Π΅Ρ€ инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° i. ПослС Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° i обновляСтся Π² соотвСтствии с измСнСниями Π±ΡƒΡ„Π΅Ρ€Π° j.

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

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ считаСтся, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ ссылка ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ссылкС. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ использовался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния, слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ OutAttribute ΠΈΠ· пространства ΠΈΠΌΡ‘Π½ System::Runtime::InteropServices, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’ΠΈΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ часто содСрТат ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ const, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅:

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ const транслируСтся Π² Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄Π° [ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π³Π»Π°Π²Π΅ 8 ΠΊΠ½ΠΈΠ³ΠΈ]. ΠœΠ΅Ρ‚ΠΎΠ΄ fWrapper всё Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠ· управляСмого ΠΊΠΎΠ΄Π°, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ сторона Π½Π΅ воспринимаСт ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ const:

Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ указатСля Π½Π° массив Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСдостаточно просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ ссылку. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ этот случай, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ класса SampleCipher Π΅ΡΡ‚ΡŒ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ:

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС нСдостаточно просто ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ const unsigned char* Π² const unsigned char%, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² конструктор Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, содСрТит Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°. Π›ΡƒΡ‡ΡˆΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

Π’ этом конструкторС ΠΎΠ±Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ конструктора (pKey ΠΈ nKeySizeInBytes) ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° управляСмый массив. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ управляСмого массива ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΎ врСмя выполнСния.

Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ этот конструктор, зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ класса SampleCipher. Если конструктор создаёт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ копию ΠΊΠ»ΡŽΡ‡Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° pKey, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Π΅ΠΏΠ»ΡΡŽΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡:

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

Для этого Π½Π°Π΄ΠΎ внСсти измСнСния ΠΊΠ°ΠΊ Π² конструктор, Ρ‚Π°ΠΊ ΠΈ Π² дСструктор управляСмой ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ конструктора ΠΈ дСструктора:

Если Π½Π΅ Π±Ρ€Π°Ρ‚ΡŒ Π² расчёт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ эзотСричСскиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ [ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 11 ΠΊΠ½ΠΈΠ³ΠΈ], ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ здСсь ΠΊΠΎΠ΄ обСспСчиваСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ освобоТдСниС рСсурсов Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Если ΠΏΡ€ΠΈ создании экзСмпляра ManagedWrapper::SampleCipher Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка, всС Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ рСсурсы Π±ΡƒΠ΄ΡƒΡ‚ освобоТдСны. ДСструктор Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ массив, содСрТащий ΠΊΠ»ΡŽΡ‡, Π΄Π°ΠΆΠ΅ Ссли дСструктор ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выбросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы управляСмых ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ. Помимо Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° Π²Ρ‹Π·ΠΎΠ² ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· управляСмого ΠΊΠΎΠ΄Π°, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΈ управляСмыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ C++ Π½Π° управляСмыС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Помимо управлСния рСсурсами, устойчивого ΠΊ возникновСнию ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, управляСмая ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΠ± ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ C++, выбрасываСмых Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, Π² управляСмыС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ SampleCipher ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 128 ΠΈ 256-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ NativeLib::SampleCipher ΠΌΠΎΠ³ Π±Ρ‹ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NativeLib::CipherException, Ссли Π² Π½Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΊΠ»ΡŽΡ‡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ C++ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠ° System::Runtime::InteropServices::SEHException, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для потрСбитСля Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ [обсуТдаСтся Π² Π³Π»Π°Π²Π΅ 9 ΠΊΠ½ΠΈΠ³ΠΈ]. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ управляСмыС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, содСрТащиС эквивалСнтныС Π΄Π°Π½Π½Ρ‹Π΅.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ конструктора, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ try Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² класса, Ρ‚Π°ΠΊ ΠΈ Π² Ρ‚Π΅Π»Π΅ конструктора.

Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π»ΠΎΠΊ try Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, хотя инициализация Ρ‡Π»Π΅Π½ΠΎΠ² класса Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ выбросу ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ класса ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ наслСдованиС SampleCipher ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ управляСмых массивов Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ конструктора, Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Encrypt ΠΈ Decrypt. Π Π°Π½Π΅Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ сигнатур этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Ρ‹Π»ΠΎ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ ΠΈΡ… ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ:

Π”Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² pData ΠΈ nDataLength. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Encrypt ΠΈΠ»ΠΈ Decrypt слСдуСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ памяти. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° pBuffer Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° этот Π±ΡƒΡ„Π΅Ρ€, Π° Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² качСствС значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° nBufferLength. Π Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ возвращаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° nNumEncryptedBytes.

Для отобраТСния Encrypt ΠΈ Decrypt ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ManagedWrapper::SampleCipher:

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π΅ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²

Π Π°Π½Π΅Π΅ всС Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Ρ‹Π»ΠΈ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ указатСлями ΠΈΠ»ΠΈ ссылками Π½Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Если Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² классы C++ Π»ΠΈΠ±ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈΠ»ΠΈ ссылки Π½Π° классы C++, Ρ‚ΠΎ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия. Π’ зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ класс, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ°:

Как ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ ΠΎ ΠΈΠΌΠ΅Π½ΠΈ этого класса, Π΅Π³ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… дискуссии Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΠΊΡƒΠ΄Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы, наслСдованныС ΠΎΡ‚ CryptoAlgorithm (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SampleCipher). Алгоритм ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктора Ρ‚ΠΈΠΏΠ° CryptoAlgorithm&. ЭкзСмпляр класса CryptoAlgorithm, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π² конструктор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ SendData ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Encrypt. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ EncryptingSender Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ Π½Π°Π΄ NativeLib::EncryptingSender, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ управляСмый класс ManagedWrapper::EncryptingSender. Как ΠΈ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° класса SampleCipher, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΠΎΠ»Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляра ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ класса EncryptingSender трСбуСтся экзСмпляр класса NativeLib::CryptoAlgorithm. Допустим, СдинствСнный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, это SampleCipher. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ конструктор, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° array ^ Π² качСствС ΠΊΠ»ΡŽΡ‡Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ конструктор класса ManagedWrapper::SampleCipher, конструктор EncryptingSender ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот массив для создания экзСмпляра Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ класса NativeLib::SampleCipher. Π—Π°Ρ‚Π΅ΠΌ, ссылку Π½Π° этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² конструктор NativeLib::EncryptingSender:

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π²Π°ΠΌ Π½Π΅ придётся ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° CryptoAlgorithm& Π½Π° управляСмый Ρ‚ΠΈΠΏ. Однако ΠΈΠ½ΠΎΠ³Π΄Π° этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ слишком ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. НапримСр, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ экзСмпляр SampleCipher, Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ. Для этого Ρƒ конструктора ManagedWrapper::EncryptingSender Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° SampleCipher^. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса NativeLib::EncryptingSender Π²Π½ΡƒΡ‚Ρ€ΠΈ конструктора, Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса NativeLib::SampleCipher, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚ Π² ManagedWrapper::SampleCipher. Для получСния ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° трСбуСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ конструктора:

Пока Ρ‡Ρ‚ΠΎ эта рСализация позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ экзСмпляры класса ManagedWrapper::SampleCipher. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ EncryptingSender с любой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ Π½Π°Π΄ CryptoAlgorithm, придётся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ рСализация GetWrappedObject Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ°ΠΌΠΈ Π±Ρ‹Π»Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ управляСмого интСрфСйса:

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого интСрфСйса Π½Π°Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ SampleCipher ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ internal, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ доступ нСпосрСдствСнно ΠΊ ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π²Π°ΠΌ слСдуСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ System::IntPtr, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ System::IntPtr соотвСтствуСт CLS.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ конструктор класса ManagedWrapper::EncryptingSender ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° INativeCryptoAlgorithm^. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса NativeLib::CryptoAlgorithm, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для создания ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ экзСмпляра EncryptingSender, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetWrappedObject Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ° INativeCryptoAlgorithm^:

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° наслСдования ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Если Π²Ρ‹ сдСлаСтС ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π² Π½ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ INativeCryptoAlgorithm, Ρ‚ΠΎ ΠΈΡ… Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² конструктор ManagedWrapper::EncryptingSender. Однако Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π² управляСмом ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² EncryptingSender ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ нСльзя. Для этого потрСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² управляСмом классС нСльзя просто ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ класса. Для этого придётся снова ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ управляСмых классов-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ.

На этот Ρ€Π°Π· потрСбуСтся абстрактный управляСмый класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π΅Ρ€Π½Ρ‘Ρ‚ NativeLib::CryptoAlgorithm. Помимо ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetWrappedObject, этот класс-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Π²Π° абстрактных ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой криптографичСский Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ управляСмый класс-наслСдник ManagedWrapper::CryptoAlgorithm ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Encrypt ΠΈ Decrypt. Однако этих абстрактных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² нСдостаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ NativeLib::CryptoAlgorithm Encrypt ΠΈ Decrypt. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ класса, Π² нашСм случаС, NativeLib::CryptoAlgorithm, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ классС-наслСдникС. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ NativeLib::CryptoAlgorithm ΠΈ пСрСопрСдСляСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

Π­Ρ‚ΠΎΡ‚ класс Π½Π°Π·Π²Π°Π½ CryptoAlgorithmProxy, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ слуТит посрСдником для управляСмого класса, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Encrypt ΠΈ Decrypt. Π•Π³ΠΎ рСализация Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ эквивалСнтныС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса ManagedWrapper::CryptoAlgorithm. Для этого CryptoAlgorithmProxy Π½ΡƒΠΆΠ΅Π½ дСскриптор экзСмпляра класса ManagedWrapper::CryptoAlgorithm. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктора. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ дСскриптор, Π½ΡƒΠΆΠ΅Π½ шаблон gcroot. (Π’Π°ΠΊ ΠΊΠ°ΠΊ CryptoAlgorithmProxy β€” это Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ класс, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ Ρ‚ΠΈΠΏΠ° дСскриптор.)

ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΎΠΉ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ абстрактного класса CryptoAlgorithm, управляСмый класс слуТит ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΎΠΉ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ наслСдника CryptoAlgorithmProxy. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, класс CryptoAlgorithmProxy Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΎΡΡŒ эквивалСнтным ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ManagedWrapper::CryptoAlgorithm. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ CryptoAlgorithmProxy::Encrypt Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ManagedWrapper::CryptoAlgorithm::Encrypt:

ΠžΠ±Ρ‰ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

УпроститС ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ с самого Π½Π°Ρ‡Π°Π»Π°

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², созданиС ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ для ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΉ классов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌ. Иногда Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ классов C++ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ управляСмыС классы ΠΌΠΎΠ³Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½ΠΎ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ такая рСализация Π½Π΅ нСсёт практичСского смысла. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” Π²ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ ΠΊ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡ΠΈ.

НС Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ колСсо. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ FCL Π½Π΅ содСрТит Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ класса с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. FCL ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ большС, Ρ‡Π΅ΠΌ каТСтся Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд. НапримСр, BCL ΡƒΠΆΠ΅ содСрТит довольно ΠΌΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. Они находятся Π² пространствС ΠΈΠΌΡ‘Π½ System::Security::Cryptography. Если Π½ΡƒΠΆΠ½Ρ‹ΠΌ Π²Π°ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² FCL, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ. Если FCL Π½Π΅ содСрТит Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ, Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ завязано Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ API, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· стандартных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈΠ· FCL.

Адаптация ΠΊ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ FCL ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния потрСбитСля Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’Ρ€ΡƒΠ΄ΠΎΡ‘ΠΌΠΊΠΎΡΡ‚ΡŒ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° зависит ΠΎΡ‚ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ API ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Ρ‚ΠΈΠΏΠΎΠ² FCL, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ Π»ΠΈ эти Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ опрСдСляСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ бСзопасности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ стоит Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с FCL.

Если Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ создаётС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, управляСт Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ классы System::Data::DataTable ΠΈ System::Data::DataSet ΠΈΠ· части FCL, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΠΎΠΉ ADO.NET. Π₯отя рассмотрСниС этих Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСкста, ΠΎΠ½ΠΈ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ упоминания благодаря своСй примСнимости Π² создании ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ.

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

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ Π½Π°Π΄ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΎΠ±Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… рСсурсов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, нСуправляСмой памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для создания ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²). НадёТноС освобоТдСниС рСсурсов β€” это Ρ‚Π΅ΠΌΠ° для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ [рассматриваСтся Π² Π³Π»Π°Π²Π΅ 11 ΠΊΠ½ΠΈΠ³ΠΈ].

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

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

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