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

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

[Джерело] Використання динамічних у C# 4.0

[Копіювати посилання]
Опубліковано 07.07.2016 10:23:00 | | |
C# 4.0 вводить новий тип: dynamic, який є статичним типом, але екземпляр об'єкта цього типу може обійти процес перевірки статичного типу. У більшості випадків тип працює як клас об'єктів. Під час компіляції екземпляр динамічного класу підтримує будь-яку операцію, тому немає потреби хвилюватися, чи об'єкт взятий з COM API, чи з динамічної мови, як IronPython, з HTML DOM, з рефлексії чи з іншого місця програми. Однак, якщо код робить щось недійсне, помилка фіксується під час виконання.
Наприклад, приклад методу exampleMethod1 у наступному фрагменті коду має лише один параметр, і компілятор може визначити, що він недійсний при виклику ec.exampleMethod1(10,4) під час компіляції; Це помилка компіляції. Другий виклик dynamic_ec.exampleMethod1(10,4) не перевіряється на статичні типи. Тому компілятор не повідомляє про помилки компіляції. Однак комаха не ховається вічно; Це буде зафіксовано під час виконання і спричинить виняток під час виконання.
static void Main(string[] args){
    ExampleClass ec = новий ExampleClass();
    динамічний dynamic_ec = новий ExampleClass();
    dynamic_ec.exampleMethod1(10, 4);
    dynamic_ec.someMethod («деякі аргументи», 7, null);
    dynamic_ec.nonexistentMethod();
}
клас ExampleClass {
    публічний ExampleClass() { }
    public ExampleClass(int v) { }
    public void exampleMethod1(int i) { }
    public void exampleMethod2(string str) { }
}
Ось приклад використання динамічних методів для виклику IronPython:

використання IronPython.Hosting;
використовуючи Microsoft.scrip{filtering}ting. Ведення;

Console.WriteLine ("Завантаження random.py...");
scrip{filter}tRuntime py = Python.CreateRuntime();
динамічне випадкове = py. UseFile("random.py");
Console.WriteLine("random.py завантажено!");
var items = Enumerable.Range (1, 7). ToArray();

для (int s = 0; s < 10000; s++) {
    random.shuffle(items);
    Console.Write("Sequence {0}: ", s);
    foreach (int i in items) {
        Console.Write("{0} ", i);
    }
    Console.WriteLine();
}

Для об'єктів або виразів динамічного типу роль компілятора полягає в тому, щоб інкапсулювати дії, які кожен вираз має виконати, і під час виконання перевіряти збережену інформацію, і будь-які недійсні оператори викликають виключення під час виконання.
Тип результату більшості динамічних операцій також є динамічним. Наприклад, якщо навести курсор миші на testSum у наступному прикладі, смарт-запит покаже (локальну змінну) динамічну testSum.
динамічний d = 1;
var testSum = d + 3;
Наведіть курсор миші на testSum нижче.
System.Console.WriteLine(testSum);

Перетворення типу
Перехід між екземплярами динамічного типу та іншими типами інстансів простий, і розробники можуть легко перемикатися між динамичною та нединамічною поведінкою. Будь-який екземпляр можна неявно перетворити на екземпляр динамічного типу, див. наступний приклад:
динамічний 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.

Сумісність COM
C# 4.0 містить кілька функцій, які покращують сумісність із традиційними інтерфейсами COM API, такими як автоматизація Office. Динамічні типи, іменовані параметри та опціональні параметри також є частиною покращення.
Багато COM-методів дозволяють їхнім параметрам і поверненим значенням бути об'єктом типу, тому для сильно типізованих мов, таких як C#, потрібна велика кількість примусового перетворення типів. Однак у C# 4.0, якщо додати опцію /link під час компіляції, динамічний тип має новий ефект: він робить тип об'єкта (тип параметра або тип повернення) у сигнатурі методу інтерфейсу COM динамічним, уникаючи значного перетворення типів. Наприклад, наступне твердження протиставляє це.
Він не використовується динамічно.
((Excel.Range)excel. Клітини[1, 1]). Value2 = «ім'я»;
Excel.Діапазон діапазону = (Excel.Діапазон)Excel. Клітини[1, 1];

Це була динамічна справа.
Excel. Клітини[1, 1]. Value = «Ім'я»;
Excel. Діапазон = Excel. Клітини[1, 1];




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

Mail To:help@itsvse.com