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

Вид: 21258|Ответ: 0

[Источник] Правильное использование динамического в C#

[Скопировать ссылку]
Опубликовано 07.07.2016 10:15:06 | | |
динамическая — это новая функция FrameWork 4.0. Появление динамического языка придало C# характеристики слабого типа языка. Компилятор больше не проверяет тип во время компиляции, а динамический объект по умолчанию поддерживает любую желаемую функцию во время компиляции. Например, даже если вы ничего не знаете об объекте, возвращаемом методом GetDynamicObject, вы можете выполнить такой вызов кода, и компилятор не выдаст ошибки:




Когда речь идёт о правильном использовании, сначала следует указать на одно неправильное применение:

Люди часто используют ключевое слово var для сравнения с динамичным. На самом деле, var и dynamic — это совершенно две концепции, и их вообще не стоит сравнивать. После компиляции время компиляции автоматически совпадает с фактическим типом переменной var и заменяет объявление переменной на фактический тип, что выглядит так, будто мы объявляем реальный тип при кодировании. После компиляции dynamic это фактически объектный тип, но компилятор специально обрабатывает динамический тип, чтобы не выполнять проверку типов во время компиляции, а помещает проверку типа в процесс выполнения.

Это можно увидеть в окне редактора Visual Studio. Переменные, объявленные как vars, поддерживают «intelligent sense», потому что Visual Studio может определить реальный тип типов var, тогда как переменные, объявленные как динамические, не поддерживают «intelligent sense», поскольку компилятор ничего не знает о типе своего времени выполнения. Использование Intelligent Sense для динамических переменных подсказывает: «Это действие будет решено во время выполнения».

Тот факт, что динамическая переменная является объектной переменной, может быть подтвержден кодом IL, и код IL здесь не будет опубликован. Конечно, компилятор также обрабатывает динамические объявления для различия между прямыми объектными переменными.

динамический режим широко реализован в MSDN для упрощения совместимости, и я считаю, что именно на этом некоторых разработчиков неправильно понимают: поскольку многие разработчики не умеют использовать кодирование, такое как вторичная разработка COM+ и OFFICE, им срочно нужна динамическая причина для применения. Поэтому в ежедневной разработке я считаю, что динамика ценна:

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

Ранее мы использовали отражения вот так:



Теперь у нас есть упрощённый способ написания:


Мы можем относиться к такому упрощению, ведь кажется, что код не был сильно сокращён, но если учесть две характеристики эффективности и красоты, то преимущества динамики очевидны. Компилятор оптимизирует динамическую эффективность, чтобы она была гораздо быстрее, чем некэшированная эффективность отражения. Если нужно сравнивать, можно запустить код двух вышеуказанных (часть метода вызова добавления) для 10000000, чтобы сделать вывод.






Предыдущий:mvc получает JSON XML-данные для этой записи
Следующий:Произошла ошибка распознавания. Рядом с линией 1, колонна 10
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com