C# 4.0 динамічний тип даних

45

Програмування Asp.net
Попередній

Наступний

При стандартному програмуванні ми отримуємо посилання на об’єкт, а потім викликаємо метод цього об’єкта, приклад:

Калькулятор calc = GetCalculator();
int sum = calc.Add(10, 20);

Код ставати більш цікавим якщо клас не є статичним типів, тобто він створюється не на мові C#, а наприклад написаний на Ruby, Python або JavaScript або це COM об’єкт. Тоді для виклику потрібного методу потрібно було скористатись ось таким кодом:

object calc = GetCalculator();
Type type = calc.GetType();
object result = type.InvokeMember(“Add”,
BindingFlags.InvokeMethod, null,
new object[] { 10, 20 });
int sum = Convert.ToInt32(result);

Якщо б клас був написаний на JavaScript тоді, наш код можна змінити на такий:

ScriptObect calc = GetCalculator();
object result = calc.InvokeMember(“Add”, 10, 20);
int sum = Convert.ToInt32(result);

В C# 4.0 ми просто написали б наступний код:

dynamic calc = GetCalculator();
int result = calc.Add(10, 20);

І все буде працювати.

Якщо ми оголошуємо об’єкт як dynamic, то це означає що він буде формуватися на етапі роботи програми і всі невідомі методи ігноруються компілятором.

Взагалі то я трохи побоююся такого підходу, тому що воно може призвести до прикрих помилок, наприклад, код

int result = calc.Ad(10, 20);

теж успішно пройде компіляцію