2016-07-20 2 views
0
dynamic d = "hello"; 
Console.WriteLine (d.ToUpper()); // HELLO 
Console.WriteLine (d.Foo()); // Compiles OK but gives runtime error 

Я читаю книгу споткнулась в этом разделе, в третьей строке он только кидает ошибку во время выполнения, но он будет компилировать, хотя Foo метод не существует.Динамические переменные компиляции

Почему бы не проверить его во время компиляции, а не во время выполнения?

Редактировать: Какое значение и когда я могу использовать эту концепцию?

+0

Вы можете отметить это как дубликат, моя единственная цель в этом посте - получить вход от опытных программистов, вы не можете найти все это в книге или даже в некоторых сообщениях. – Sherlock

ответ

4

С помощью dynamic вы инструктируете компилятор игнорировать его и позволить ему работать с ним. Это очень полезно при работе с COM и другими интерфейсами, о которых компилятор не знает.

Если вы хотите, чтобы неявные типы использовали var. Компилятор выводит тип и сохраняет его строго типизированным.

+0

Когда я могу использовать эту технику? или правильный способ его использования? – Sherlock

+3

@Desperado, книга, которую вы читаете, должна иметь такое объяснение правильного использования. Else, поиск в SO, есть довольно похожий вопрос. – Rahul

+0

@Rahul да, я прочитал его, но не все понятия и приемы присутствуют. Мы не можем утверждать, что когда мы имеем дело с опытными программистами – Sherlock

4

Это ключевое слово dynamic. При создании переменной dynamic вы можете сделать все с этим, делая его не компилируемым временем. Итак, сделав это dynamic, вы полностью обойдете типы compiletime - вот почему вы должны позаботиться о его использовании.

Проверка членов во время выполнения - это целая точка dynamic, хотя - почему она должна существовать иначе?

Я предполагаю, что вы намеренно хотели получить var-ключевое слово, которое дает you compiletime-safety. Посмотрите на this point for the difference on both. Что касается , когда, чтобы использовать ключевое слово, посмотрите на this post.

+0

, когда я могу использовать эту технику? или правильный способ его использования? – Sherlock

+0

Обычно вообще нет, есть только условия росы, которые вы должны использовать. Во всяком случае, я не буду так много заботиться, пока вы не будете * явно. – HimBromBeere

+0

спасибо, брат! Это полезно, даже если я потерял часть своей репутации. Модераторы T.T вздохнули – Sherlock

Смежные вопросы