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

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

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

OnEvent(this, new EventArgs());

Атрибуты

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ эквивалСнта Π² ANSI C++, ΠΎΠ΄Π½Π°ΠΊΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ компилятором Microsoft C++ ΠΊΠ°ΠΊ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Windows. Π’ вСрсии C# ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ классы .NET, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выводятся ΠΈΠ· System.Attribute. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ элСмСнтам ΠΊΠΎΠ΄Π° C# (классам, пСрСчислСниям, ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΈ Ρ‚.Π΄.) для создания Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ сборкС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ компилятором C# ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ влияниС Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Они Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Атрибут ОписаниС DllImport Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π²ΠΎ внСшнСй DLL. StructLayout ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ содСрТимоС структуры Π² памяти. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эквивалСнт union Π² C#. Obsolete Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компилятора ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ этот ΠΌΠ΅Ρ‚ΠΎΠ΄. Conditional ЗаставляСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ всС ссылки Π½Π° Π½Π΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли присутствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ символ прСпроцСссора.

БущСствуСт большоС число Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ свои собствСнныС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. ИспользованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² рассматриваСтся Π² Π³Π»Π°Π²Π°Ρ… 6 ΠΈ 7.

Богласно синтаксису Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹, Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ синтаксис, ΠΊΠ°ΠΊ Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Microsoft C++.

[Conditional("Debug")]

void DisplayValuesOfImportantVariables() {

 // ΠΈ Ρ‚.Π΄.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора

C# ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ C++, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡ… Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС. Π’ частности, C# Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ C++ #include. (Она Π½Π΅ трСбуСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² C# Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ объявлСниС.)

Бинтаксис Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора Π² C# Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² C++. Π’ C# ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹:

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ #define/#undef Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² C++, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°, Π΄ΠΎ ΠΊΠΎΠ΄Π° C#. #if/#elif/#else/#endif Π’ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ Π² C++ #ifdef/#elif/#else/#endif. #line Π’ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ Π² C++ #line. #warning/#error Π’ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ Π² C++ #warning/#error. #region/#endregion ΠŸΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. ΠžΠ±Π»Π°ΡΡ‚ΠΈ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ VisualStudio.NET) ΠΈ поэтому ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ΄Π°, прСдставлСнного ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

ПpилоТСниС B

C# для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Java

Π’ "Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅ Π²ΠΎΠΉΠ½Ρ‹" Π‘ΡƒΠ½ΡŒ Π¦Π·Ρ‹ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ "Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‰ΠΈ большой ваТности с нСбольшим усилиСм, Π° Π²Π΅Ρ‰ΠΈ нСбольшой ваТности с большим усилиСм". Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π²ΡƒΡ‡Π°Ρ‚ΡŒ странно, Π½ΠΎ Π°Π²Ρ‚ΠΎΡ€ Ρ…ΠΎΡ‡Π΅Ρ‚, Π²ΠΈΠ΄ΠΈΠΌΠΎ, ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‰Π°Ρ…, Ρ‚ΠΎ Π²Π°ΠΆΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ Ρ‚ΠΎΠ³Π΄Π° позаботятся ΠΎ сСбС сами. Как это ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ C# ΠΈ Java?

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

Π’ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ сосрСдоточимся ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Π½Π° вопросС, Π²Π°ΠΆΠ½ΠΎΠΌ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Java: ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² C# ΠΎΠΏΡ‹Ρ‚ использования Java, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½Π΅ΠΌ свойства присущиС C#, ΠΈ рассмотрим, Ρ‡Ρ‚ΠΎ C# Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚. Π—Π΄Π΅ΡΡŒ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌ с Java, поэтому отсутствуСт ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС языка Java, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ.

ΠžΡΠ½ΠΎΠ²Ρ‹

Одно ΠΈΠ· основных Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ C# ΠΈ Java Π»Π΅ΠΆΠΈΡ‚ Π½Π΅ Π² самом языкС, Π° Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Java трСбуСтся для выполнСния ΠΊΠΎΠ΄Π° рабочая срСда Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Java Runtime Environment. C# ΠΈ, Π½Π° самом Π΄Π΅Π»Π΅, вся ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° .NET Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² срСдС Common Language Runtime.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ свойств CLR, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ срСды, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² JRE Java. Π’ Ρ‚ΠΎ врСмя, ΠΊΠ°ΠΊ JRE ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ языком Java, CLR прСдоставляСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… языков с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VOS (virtual object system β€” систСма Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²), которая прСдоставляСт Π±ΠΎΠ³Π°Ρ‚ΡƒΡŽ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ систСму, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ мноТСства Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² языков программирования. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Java ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ состояниС, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ поставляСмой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. CLR, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π½Π΅ прСдоставляСт Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Код C# Ρ‚Π°ΠΊΠΆΠ΅ компилируСтся Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ состояниС, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ для удобства ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ языком (IL, Intermediate Language). Но ΠΊΠΎΠ΄ IL пСрСдаСтся Π² управляСмыС CLR процСссы выполнСния ΠΈΠ»ΠΈ компиляторам JIT CLR, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ JITters, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ IL Π² собствСнный ΠΊΠΎΠ΄.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим извСстный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ "Hello, World!" Π½Π° Java (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ здСсь Π±Π΅Π· затСнСния): 

public class Hello {

 public static void main(String args[]) {

  System.out.println("Hello world! This is Java Code!");

 }

}

Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ C# для этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ (прСдставлСн Π½Π° сСром Ρ„ΠΎΠ½Π΅):

public class Hello {

 public static void Main(string[] args) {

  System.Console.WriteLine("Hello world! This is C# code!");

 }

}

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ эти Π΄Π²Π° ΠΊΠΎΠ΄Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ, ΠΏΠΎ большСй части различия Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ использованиС Π·Π°Π³Π»Π°Π²Π½Ρ‹Ρ… Π±ΡƒΠΊΠ² Π² string ΠΈ Main ΠΈ использованиС System.Console.WriteLine вмСсто System.out.println). Он являСтся, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ зависимым ΠΎΡ‚ рСгистра символов.

НСобходимо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ string, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² C# Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ S β€” ΠΊΠ°ΠΊ String. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

public class Hello {

 public static void Main(String [] args) {

  System.Console.WriteLine("Hello world! This is C# code!");

 }

}

МоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ спСцификатор Ρ€Π°Π½Π³Π° массива [] ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ ΠΈΠ· ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ args Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Java Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠΎΠΌ string ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ args Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ C#. Π’ C# спСцификатор Ρ€Π°Π½Π³Π° массива Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ массив являСтся Π½Π° самом Π΄Π΅Π»Π΅ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ указываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ []:

// C#

int [] X; // массив Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² C#


// ΠΏΡ€ΠΈΠΌΠ΅Ρ€ java

int [] Ρ…; // массив Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² java

int x[]; // массив Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² java

Π’ΠΎΡ‚ ΠΆΠ΅ самый ΠΊΠΎΠ΄ C# ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

using System;

class Hello {

 public static int Main() {

  Console.WriteLine ("Hello world! This is C# code!");

  return 0;

 }

}

Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, измСнилось нСсколько элСмСнтов. ОбъявлСниС string [] args Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° являСтся Π² C# Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (хотя скобки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°), ΠΊΠ°ΠΊ ΠΈ использованиС public ΠΏΡ€ΠΈ объявлСнии ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово using Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΠΎ смыслу ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову include Π² Java, ΠΈ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ System являСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π² C#, пСрвая строка позволяСт Π½Π°ΠΌ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ System, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Console.WriteLine. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ int вмСсто void, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ строку return 0;.

Π‘Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° C# Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π² Java. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Main() являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ класса, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π’ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ C# являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ static Main, ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ компилятор. НСобходимо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ main() Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. ΠŸΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Main. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа public (обсуТдаСмый ΠΏΠΎΠ·Π΄Π½Π΅Π΅) ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступным потрСбитСлям ΠΊΠΎΠ΄Π° Π²Π½Π΅ класса, ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ»ΠΈ прилоТСния, ΠΈ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ компилятор, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ.

Аналогично Π² Java ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ словС static позволяСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ сначала Π±Π΅Π· создания экзСмпляра класса. Для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Main() ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π² качСствС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° значСния void ΠΈΠ»ΠΈ int. void опрСдСляСт, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, a int опрСдСляСт, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.