Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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();
}
class ExampleClass {
    public 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 loaded!");
var items = Elistable.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 testСумма = d + 3;
Наведите курсор мыши на testSum ниже.
System.Console.WriteLine(testSum);

Преобразование типов
Переход между инстансами динамического типа и другими типами инстансов прост, и разработчики могут легко переключаться между динамичным и нединамическим поведением. Любой экземпляр можно неявно преобразовать в динамический тип, см. следующий пример:
динамический d1 = 7;
динамический d2 = «строка»;
динамический d3 = System.DateTime.Today;
динамический 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