Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 21258|Відповідь: 0

[Джерело] Правильне використання динаміки в C#

[Копіювати посилання]
Опубліковано 07.07.2016 10:15:06 | | |
динамічний — це нова функція 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, щоб зробити висновок.






Попередній:mvc отримує JSON XML-дані для посту
Наступний:Сталася помилка розпізнавання. Біля лінії 1, стовпець 10
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com