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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ПолноС руководство. Π‘# 4.0Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 153

Автор Π¨ΠΈΠ»Π΄Ρ‚ Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² == ΠΈ != ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, содСрТит Π»ΠΈ обнуляСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²ΠΏΠΎΠ»Π½Π΅ допустима ΠΈΠ΄Π°Π΅Ρ‚ истинный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.if(upper == null) // ...

Если Π² логичСском Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° bool?, Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: true (истинноС), false (Π»ΠΎΠΆΠ½ΠΎΠ΅) ΠΈΠ»ΠΈnull (Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ примСнСния логичСских ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² & ΠΈ | ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ‚ΠΈΠΏΠ° bool?.PQP | QP & Qtruenulltruenullfalsenullnullfalsenulltruetruenullnullfalsenullfalsenullnullnullnull

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ссли логичСский ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ! примСняСтся ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠ° bool?, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся пустым (null), Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ(null).ЧастичныС Ρ‚ΠΈΠΏΡ‹

Начиная с вСрсии 2.0, Π² C# появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса,структуры ΠΈΠ»ΠΈ интСрфСйса Π½Π° Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ части с сохранСниСм ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ контСкстного ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова partial. ВсСэти части ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ вмСстС Π²ΠΎ врСмя компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Если ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ partial ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания частичного Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ ΠΎΠ½ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΠ±Ρ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:partial Ρ‚ΠΈΠΏ имя_Ρ‚ΠΈΠΏΠ° { // ...

Π³Π΄Π΅ имя_Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ имя класса, структуры ΠΈΠ»ΠΈ интСрфСйса, раздСляСмого Π½Π° части. КаТдая Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ частичного Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ вмСстС с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ partial.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ раздСлСния простого класса, содСрТащСго ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ XY, Π½Π°Ρ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ содСрТимоС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

partial class XY { public XY(int a, int b) { X = a; Y = b; }}

Π”Π°Π»Π΅Π΅ слСдуСт содСрТимоС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.partial class XY { public int X { get; set; }}

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, содСрТимоС Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°.partial class XY { public int Y { get; set; }}Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ Ρ„Π°ΠΉΠ»Π΅ исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ дСмонстрируСтся ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ класса XY.

// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ опрСдСлСния частичного класса.using System;

class Test { static void Main() { XY xy = new XY (1, 2); Console.WriteLine(xy.X + + xy.Y); }}Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ классом XY, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ всС Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Ρ‹. Π’Π°ΠΊ, Ссли Ρ„Π°ΠΉΠ»Ρ‹ класса XY Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ xy1.cs, Ρ…Ρƒ2.cs ΠΈ Ρ…Ρƒ3.cs,Π° класс Test содСрТится Π² Ρ„Π°ΠΉΠ»Π΅ test.cs, Ρ‚ΠΎ для Π΅Π³ΠΎ компиляции достаточно ввСстив ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

csc test.cs xy1.cs xy2.cs Ρ…ΡƒΠ—.csИ послСднСС Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π² C# Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ частичныС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ классы. Но ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° Π² объявлСнии ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚Π΅ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π΅Π³ΠΎ частях.## ЧастичныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ΠšΠ°ΠΊ пояснялось Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° partial ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс частичного Ρ‚ΠΈΠΏΠ°. Начиная с вСрсии 3.0, Π² C# появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ для создания частичного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² элСмСнтС данныхчастичного Ρ‚ΠΈΠΏΠ°. Частичный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ Π΅Π³ΠΎ части, Π° рСализуСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° partial ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΡ‚ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² частичном классС ΠΈΠ»ΠΈ структурС.Главная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ частичного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ рСализация нСтрСбуСтся! Если частичный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ рСализуСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ части класса ΠΈΠ»ΠΈ структуры,Ρ‚ΠΎ всС Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠΎΠ»Ρ‡Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π½ΠΎ Π½Π΅ Π²ΠΎΡΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, хотя ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ класса. Если эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΠ½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ просто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ вСрсия ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создаСтся частичный ΠΌΠ΅Ρ‚ΠΎΠ΄ Show(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ShowXY(). Радиудобства всС части класса XY прСдставлСны Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ распрСдСлСны ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ частичного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.using System;

partial class XY { public XY(int a, int b) { X = a; Y = b; }// ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ частичный ΠΌΠ΅Ρ‚ΠΎΠ΄.partial void Show();

}

partial class XY { public int X { get; set; }// Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ частичный ΠΌΠ΅Ρ‚ΠΎΠ΄.partial void Show() { Console.WriteLine("{0}, {1}", X, Y);}

}

partial class XY { public int Y { get; set; }// Π’Ρ‹Π·Π²Π°Ρ‚ΡŒ частичный ΠΌΠ΅Ρ‚ΠΎΠ΄.public void ShowXY() { Show();}

}

class Test { static void Main() { XY xy = new XY(1, 2); xy.ShowXY(); }}ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Show() ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ части класса XY,Π° рСализуСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΅Π³ΠΎ части. Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° выводятся значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ X ΠΈ Y. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Show() вызываСтся ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ShowXY(),Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ послСдствия: Π²Ρ‹Π²ΠΎΠ΄ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ X ΠΈ Y. Но Ссли Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Show(), Ρ‚ΠΎ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ShowXY() Π½ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚.Частичным ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ присущ ряд ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° void. Π£ Π½ΠΈΡ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π’ Π½ΠΈΡ… нСльзя Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ out.## Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² динамичСского Ρ‚ΠΈΠΏΠ°ΠšΠ°ΠΊ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π½Π΅ Ρ€Π°Π·, начиная с Π³Π»Π°Π²Ρ‹ 3, C# являСтся строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком программирования. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции Π½Π° соотвСтствиС Ρ‚ΠΈΠΏΠΎΠ², ΠΈ поэтому дСйствия, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ компиляции. И хотя строгий ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΡ‚ΠΈΠΏΠΎΠ² Π΄Π°Π΅Ρ‚ Π½Π΅ΠΌΠ°Π»ΠΎ прСимущСств ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌΡƒ, помогая ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ устойчивыСи Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ослоТнСния Π² Ρ‚Π΅Ρ… случаях,ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° остаСтся нСизвСстным Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. НСчто ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΈ использовании рСфлСксии, доступС ΠΊ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈΠ»ΠΈΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли трСбуСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ взаимодСйствия с Ρ‚Π°ΠΊΠΈΠΌ динамичСскимязыком, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, IronPython. Π”ΠΎ появлСния вСрсии C# 4.0 ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ситуациибыли Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΡ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΡΡ‚ΠΎΠ»ΡŒ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ полоТСнияв вСрсии C# 4.0 Π±Ρ‹Π» Π²Π½Π΅Π΄Ρ€Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ dynamic.Π—Π° ΠΎΠ΄Π½ΠΈΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΈΠΏ dynamic ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚ΠΈΠΏ object, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого Ρ‚ΠΈΠΏΠ°. А отличаСтся ΠΎΠ½ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° object Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ вся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° dynamic Π½Π° соотвСтствиС Ρ‚ΠΈΠΏΠΎΠ²ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° object ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ этойпровСркС Π²ΠΎ врСмя компиляции. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ откладывания ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя компиляции прСдполагаСтся, Ρ‡Ρ‚ΠΎΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° dynamic ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², доступ ΠΊ полям ΠΈ Ρ‚.Π΄. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Π±Π΅Π· ошибок. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли Π²ΠΎ врСмя выполнСния фактичСский Ρ‚ΠΈΠΏ, ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΈΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация Π²ΠΎ врСмя выполнСния.Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° dynamic дСмонстрируСтся Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° dynamic.using System;using System.Globalization;

class DynDemo { static void Main() { // ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΄Π²Π΅ динамичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. dynamic str; dynamic val; // ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² динамичСскиС Ρ‚ΠΈΠΏΡ‹. // ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ присваивания Π²ΠΏΠΎΠ»Π½Π΅ допустимы. str = "Π­Ρ‚ΠΎ строка"; val = 10; Console.WriteLine("ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ str содСрТит: " + str); Console.WriteLine("ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ val содСрТит: " + val + '\n'); str = str.ToUpper(CultureInfo.CurrentCulture); Console.WriteLine("ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ str Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит: " + str); val = val + 2; Console.WriteLine("ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ val Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит: " + val + '\n'); string str2 = str.ToLower(CultureInfo.CurrentCulture); Console.WriteLine("ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ str2 содСрТит: " + str2); // ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ нСявныС прСобразования ΠΈΠ· динамичСских Ρ‚ΠΈΠΏΠΎΠ². int Ρ… = val * 2; Console.WriteLine("ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ x содСрТит: " + Ρ…);}

}Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ str содСрТит: Π­Ρ‚ΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ val содСрТит: 10

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ str Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит: ЭВО Π‘Π’Π ΠžΠšΠΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ val Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит: 12

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ str2 содСрТит: это ΡΡ‚Ρ€ΠΎΠΊΠ°ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ… содСрТит: 24ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ str ΠΈ val, ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Π΅Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΈΠΏΠ° dynamic. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° соотвСтствиС Ρ‚ΠΈΠΏΠΎΠ² опСрацийс участиСм ΠΎΠ±Π΅ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ врСмя компиляции. Π’ итогСдля Π½ΠΈΡ… оказываСтся ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠΉ любая опСрация. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉstr Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ToUpper() ΠΈ ToLower() класса String, Π° пСрСмСнная участвуСт Π² опСрациях слоТСния ΠΈ умноТСния. И хотя всС пСрСчислСнныС Π²Ρ‹ΡˆΠ΅ дСйствиясовмСстимы с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², присваиваСмых ΠΎΠ±Π΅ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² рассматриваСмом здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, компилятору ΠΎΠ± этом Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ извСстно β€” ΠΎΠ½ просто ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚.И это, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ динамичСских ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, хотя ΠΈ допускаСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ появлСния ошибок Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… дСйствиях Π²ΠΎ врСмя выполнСния.Π’ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠΌ здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π΅Π΄Π΅Ρ‚ сСбя "ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ" Π²ΠΎ врСмя выполнСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, присваиваСмыС упомянутым Π²Ρ‹ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ дСйствия, выполняСмыС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’ частности, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ val присваиваСтся Ρ†Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ поэтому ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ цСлочислСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ,ΠΊΠ°ΠΊ слоТСниС. А ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ str присваиваСтся символьная строка, ΠΈ поэтому ΠΎΠ½Π°ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ строковыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΠ·Π° Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСлаСтся ссылка, всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉΠ½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ° dynamic возлагаСтся Π½Π° самого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ. Π’ противномслучаС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½Ρ‹ΠΌ сбоСм.Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π° сСбя Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° dynamic ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСн любой Ρ‚ΠΈΠΏ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Ρ нСявному ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ любого Ρ‚ΠΈΠΏΠ° Π² Ρ‚ΠΈΠΏ dynamic. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚ΠΈΠΏdynamic автоматичСски прСобразуСтся Π² любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ. РазумССтся, Ссли Π²ΠΎ врСмявыполнСния Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ окаТСтся Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΠ°ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. Π’Π°ΠΊ, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ рассматриваСмой здСсь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку ΠΊΠΎΠ΄Π°: