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

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

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

Для Ρ†Π΅Π»Π΅ΠΉ сопоставлСния Π² качСствС эталона ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ANSI C++. Компания Microsoft Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° многочислСнныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΊ C++, Π½ΠΎ компилятор Windows C++ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отличия, нСсовмСстимыС со стандартом ANSI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Π°Π½Ρ‹, хотя ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ сравнСнии Π΄Π²ΡƒΡ… языков.

БоглашСния Π² этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ придСрТиваСмся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… соглашСний ΠΏΡ€ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°. Код C# всСгда выводится, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… частях ΠΊΠ½ΠΈΠ³ΠΈ, с сСрым Π·Π°Ρ‚Π΅Π½Π΅Π½ΠΈΠ΅ΠΌ:

// это ΠΊΠΎΠ΄ C#

class MyClass : MyBaseClass { 

Если трСбуСтся Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ»ΠΈ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ C#, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ:

// это ΠΊΠΎΠ΄ C#

class MyClass : MyBaseClass // ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚

{

 int x; // это интСрСсно

Код C++, прСдставлСнный для сравнСния, выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

// это ΠΊΠΎΠ΄ C++

class CMyClass : public CMyBaseClass {

Π’ ΠΎΠ±Ρ€Π°Π·Ρ†Π°Ρ… ΠΊΠΎΠ΄Π° Π² этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΈ использовании Π΄Π²ΡƒΡ… языков ΠΏΠΎΠ΄ Windows ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠ±Ρ‰ΠΈΡ… соглашСний ΠΎ наимСнованиях. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠΌΠ΅Π½Π° классов Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… C++ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с C, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… C# β€” Π½Π΅Ρ‚. Π’Π°ΠΊΠΆΠ΅ часто Π² ΠΎΠ±Ρ€Π°Π·Ρ†Π°Ρ… ΠΊΠΎΠ΄Π° C++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… "вСнгСрский" ΡΡ‚ΠΈΠ»ΡŒ имСнования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ВСрминология

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

Если всС это Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΏΡƒΡ‚Π°Π½ΠΎ, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π² этом ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’Π΅Ρ€ΠΌΠΈΠ½ C++ Π’Π΅Ρ€ΠΌΠΈΠ½ C# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, которая являСтся Ρ‡Π»Π΅Π½ΠΎΠΌ класса ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ-Ρ‡Π»Π΅Π½ ПолС Π›ΡŽΠ±ΠΎΠΉ элСмСнт Π² классС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит инструкции Ѐункция (ΠΈΠ»ΠΈ функция-Ρ‡Π»Π΅Π½) Ѐункция Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит инструкции ΠΈ вызываСтся ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса DoSomething(/* ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ */) Ѐункция (ΠΈΠ»ΠΈ функция-Ρ‡Π»Π΅Π½) ΠœΠ΅Ρ‚ΠΎΠ΄ Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция, которая ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½ класса ΠœΠ΅Ρ‚ΠΎΠ΄ Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄

НСобходимо Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‚ΡŒ ΠΎ ΠΏΠ°Ρ€Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ²:

Π’Π΅Ρ€ΠΌΠΈΠ½ C++ Π’Π΅Ρ€ΠΌΠΈΠ½ C# Боставной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π‘Π»ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ lvalue ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π’ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ тСрминология, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ рассматриваСмому языку.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ C# ΠΈ C++

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрим ΠΎΠ±Ρ‰ΠΈΠ΅ различия ΠΈ сходства ΠΌΠ΅ΠΆΠ΄Ρƒ двумя языками.

Различия

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ области, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… C# отливаСтся ΠΎΡ‚ C++, прСдставлСны Π½ΠΈΠΆΠ΅:

β–‘ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ компиляции. Код C++ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ компилируСтся Π² язык ассСмблСра. C#, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, компилируСтся Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык (IL, intermediate language), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сходства с Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ Java. IL ΠΏΠΎΡ‚ΠΎΠΏ прСобразуСтся Π² собствСнный исполнимый ΠΊΠΎΠ΄ процСссом ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ компиляции (JIT) Π‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ IL хранится Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ мноТСствС Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ сборкой. Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΠΎ сути Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ ΠΊΠΎΠ΄ IL. Π­Ρ‚Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° соотвСтствуСт DLL ΠΈΠ»ΠΈ исполнимому Ρ„Π°ΠΉΠ»Ρƒ, создаваСмому компилятором C++.

β–‘ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. C# создан с Ρ†Π΅Π»ΡŒΡŽ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² C# Π½Π΅ трСбуСтся явно ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π±Ρ‹Π»Π° динамичСски Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΈΠ· ΠΊΡƒΡ‡ΠΈ, ΠΊΠ°ΠΊ это трСбуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ Π² C++. ВмСсто этого сборщик мусора пСриодичСски ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Для облСгчСния процСсса C# Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π² ΠΊΡƒΡ‡Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ строгиС ограничСния ΠΈΠΌΠ΅Π΅Ρ‚ C++ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ бСзопасности Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

β–‘ Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² C# Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² C++, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… Π±Π»ΠΎΠΊΠ°Ρ… ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ для использования ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π‘ΠΎΠ»ΡŒΡˆΠ΅ΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ C# полагаСтся Π½Π° ссылки Π² стилС VB/Java для экзСмпляров классов, ΠΈ язык Π±Ρ‹Π» создан с Ρ‚Π°ΠΊΠΈΠΌ расчСтом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ Ρ‚Π°ΠΊ часто, ΠΊΠ°ΠΊ Π² C++.

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

β–‘ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Как C++, Ρ‚Π°ΠΊ ΠΈ C# зависят ΠΎΡ‚ наличия ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Для ANSI C++ это β€” стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, для C# β€” мноТСство классов, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ классами .NET. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ классы .NET ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΌ наслСдовании, Π° стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° β€” Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ наслСдования ΠΈ шаблонов. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ANSI C++ Π΄Π΅Ρ€ΠΆΠΈΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ большСй Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ самого языка, Π² C# такая взаимная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сильнСС, ΠΈ рСализация ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов C# прямо зависит ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов.

β–‘ Π‘Ρ€Π΅Π΄Ρ‹ использования. C# ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ разрабатывался для основных потрСбностСй программирования Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… срСдах Π½Π° основС GUI (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Windows, хотя язык ΠΏΠΎΠΊΠ° доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Windows), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Ρ‚Π°ΠΊΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… слуТбах, ΠΊΠ°ΠΊ слуТбы Web. Π­Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ повлияло Π½Π° сам язык, Π½ΠΎ ΠΎΡ‚Ρ€Π°Π·ΠΈΠ»ΠΎΡΡŒ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов C++, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ, создавался для Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅Π³ΠΎ использования, Π² Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ интСрфСйсы ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° основС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Ни C++, Π½ΠΈ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ элСмСнтов GUI. Π’ Windows paΠ·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ C++ прямо ΠΈΠ»ΠΈ косвСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для этого API Windows.

β–‘ Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора. C# ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ синтаксису, Ρ‡Ρ‚ΠΎ ΠΈ C++. Но Π² Ρ†Π΅Π»ΠΎΠΌ сущСствуСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшСС количСство прСпроцСссорных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² Π² C#, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ свойства языка C# ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

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

β–‘ Π”Сструкторы. C# Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° вызовСтся дСструктор класса. Π’ Ρ†Π΅Π»ΠΎΠΌ Π½Π΅Ρ‚ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ программирования для создания ΠΊΠΎΠ΄Π° дСструкторов класса C#. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² C++, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… рСсурсов, ΠΊΠ°ΠΊ соСдинСния с Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ сборщик мусора ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ всю динамичСски Π²Ρ‹Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, дСструкторы Π½Π΅ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ Ρ€ΠΎΠ»ΠΈ Π² C#, ΠΊΠ°ΠΊ Π² C++. Для Ρ‚Π΅Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ внСшниС рСсурсы ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС, C# Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ интСрфСйс IDisposable.

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

Бходства

ΠžΠ±Π»Π°ΡΡ‚ΠΈ, Π³Π΄Π΅ C# ΠΈ C++ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ

β–‘ Π‘интаксис. Π’Π΅ΡΡŒ синтаксис C# ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° синтаксис C++, хотя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ многочислСнныС нСбольшиС различия.

β–‘ ΠŸΠΎΡ‚ΠΎΠΊ выполнСния. C++ ΠΈ C# ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ схоТиС инструкции управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния. Они ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π² ΠΎΠ±ΠΎΠΈΡ… языках.

β–‘ Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° для Π½ΠΈΡ… Π² C# ΠΏΠΎ сути такая ΠΆΠ΅ ΠΊΠ°ΠΊ Π² C++, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ C# допускаСт Π±Π»ΠΎΠΊΠΈ finally ΠΈ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния Π½Π° Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ.