Looking for c# Keywords? Try Ask4Keywords

C# Language Динамический поиск элементов


пример

В систему типов C # вводится новая псевдо- dynamic . Он рассматривается как System.Object , но кроме того, любой членский доступ (вызов метода, поле, свойство или доступ индексатора или вызов делегата) или приложение оператора по значению такого типа разрешено без проверки типа, и его разрешение откладывается до времени выполнения. Это называется утиным типом или поздним связыванием. Например:

// Returns the value of Length property or field of any object
int GetLength(dynamic obj)
{
    return obj.Length;
}
  
GetLength("Hello, world");        // a string has a Length property,
GetLength(new int[] { 1, 2, 3 }); // and so does an array,
GetLength(42);                    // but not an integer - an exception will be thrown
                                  // in GetLength method at run-time

В этом случае динамический тип используется, чтобы избежать более подробного отражения. Он по-прежнему использует Reflection под капотом, но обычно это происходит быстрее благодаря кешированию.

Эта функция в первую очередь ориентирована на взаимодействие с динамическими языками.

// Initialize the engine and execute a file
var runtime = ScriptRuntime.CreateFromConfiguration();
dynamic globals = runtime.Globals;
runtime.ExecuteFile("Calc.rb");

// Use Calc type from Ruby
dynamic calc = globals.Calc.@new();
calc.valueA = 1337;
calc.valueB = 666;
dynamic answer = calc.Calculate();

Динамический тип имеет приложения даже в основном статически типизированном коде, например, делает двойную отправку возможной без реализации шаблона посетителя.