динамічний — це нова функція FrameWork 4.0. Поява динаміки надала C# характеристики слабкого типу мови. Компілятор більше не перевіряє тип під час компіляції, а динамічний об'єкт підтримує будь-яку потрібну функцію за замовчуванням під час компіляції. Наприклад, навіть якщо ви нічого не знаєте про об'єкт, повернений методом GetDynamicObject, ви можете виконати виклик коду, і компілятор не видасть помилки:
Коли йдеться про правильне використання, спочатку слід вказати на одне неправильне використання:
Люди часто використовують ключове слово var для порівняння з динамічним. Насправді, var і dynamic — це абсолютно дві концепції, і їх взагалі не слід порівнювати. Після компіляції час компіляції автоматично співпадає з фактичним типом змінної var і замінює оголошення змінної на фактичний тип, що виглядає так, ніби ми декларуємо фактичний тип при кодуванні. Після компіляції dynamic це фактично тип об'єкта, але компілятор надає спеціальну обробку динамічного типу, щоб не виконувати перевірку типів під час компіляції, а розміщувати перевірку типів у процесі виконання.
Це можна побачити у вікні редактора Visual Studio. Змінні, оголошені як vars, підтримують «інтелектуальний сенс», оскільки Visual Studio може вивести фактичний тип типів var, тоді як змінні, оголошені як динамічні, не підтримують «інтелектуальний сенс», оскільки компілятор нічого не знає про тип свого середовища виконання. Використання Intelligent Sense для динамічних змінних підказує: «Ця дія буде вирішена під час виконання».
Той факт, що динамічна змінна є об'єктною, можна перевірити кодом IL, і код IL тут не буде розміщений. Звісно, компілятор також обробляє динамічні оголошення для розрізнення змінних прямого об'єкта.
Dynamic широко використовується в MSDN для спрощення сумісності, і я вважаю, що саме на цьому деяких розробників неправильно розуміють: оскільки багато розробників не вміють використовувати програмування, таке як вторинна розробка COM+ та OFFICE, їм терміново потрібна динамічна мотивація застосування. Отже, у щоденній розробці, я вважаю, що динаміка є цінною:
Перетворення типу Перехід між екземплярами динамічного типу та іншими типами інстансів простий, і розробники можуть легко перемикатися між динамичною та нединамічною поведінкою. Будь-який екземпляр можна неявно перетворити на екземпляр динамічного типу, див. наступний приклад: динамічний d1 = 7; динамічний d2 = «рядок»; динамічний d3 = System.DateTime.Today; dynamic d4 = System.Diagnostics.Process.GetProcesses(); Навпаки, неявне перетворення може динамічно застосовуватися до будь-якого виразу типової динаміки. І навпаки, будь-який вираз типової динаміки також може бути неявно конвертований у інші типи. int i = d1; струнний str = d2; DateTime dt = d3; System.Diagnostics.Process[] procs = d4; Проблема перевантаження з параметрами динамічного типу в методі Якщо метод називається проходить об'єкт динамічного типу, або об'єкт, який викликається, є типом динамічним, то оцінка перевантаження відбувається під час виконання, а не під час компіляції. Динамічна мова виконання DLR Динамічний час виконання мови — це . NET Framework 4 Beta 1 — це новий набір API, які підтримують динамічні типи в C#, а також реалізують динамічні мови програмування, такі як IronPython і IronRuby. Динаміка спрощує відображення.
Раніше ми використовували такі відображення:
Тепер у нас є спрощений спосіб написання:
Ми можемо зневажливо ставитися до такого спрощення, адже здається, що код не був суттєво скорочений, але якщо врахувати дві характеристики ефективності та краси — переваги динаміки очевидні. Компілятор оптимізує динамічні ефекти, щоб вони були значно швидшими, ніж некешоване відображення. Якщо потрібно порівнювати, можна запустити код двох вищезазначених (частина методу виклику додавання) для 1000000, щоб зробити висновок.
|