C# 4.0 динамический тип данных

Programming
Предыдущий Следующий

При стандартном программировании мы получаем ссылку на объект, а потом вызываем метод этого объекта, пример:

Calculator 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);

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

Самостоятельный отпуск Опыт заказа вывоза мусора в Киеве Магія зміни: Від ночі до дня
Магія Вечірнього Неба: Відлякуйте втомленість дня і зануртеся у світ загадок і краси Якби Росія була людиною, то як би її описав психіатр?