Рассмотрим следующий код:Почему компилятор C# допускает неправильное совпадение типа возвращаемого значения и типа переменной?
static void Main()
{
dynamic a = 1;
int b = OneMethod(a);
}
private static string OneMethod(int number)
{
return "";
}
Пожалуйста, обратите внимание, что type of b
и return type of OneMethod
не совпадает. Тем не менее он создает и генерирует исключение во время выполнения. Вопрос в том, почему компилятор допускает это? Или что это за философия?
Причиной этого может быть Compiler does not know which OneMethod would be called, because a is dynamic.
Но почему он не видит, что есть только один OneMethod
. Во время выполнения обязательно будет исключение.
Прочитайте [MSDN] (http://msdn.microsoft.com/en-us/library/dd264741.aspx) (первое предложение): _ «Динамический тип включает операции, в которых это происходит, с обходным компилятором ** -time type **. Вместо этого эти операции разрешаются во время выполнения. "_ –
@TimSchmelter благодарит вас. На самом деле я не искал MSDN. Но мой вопрос заключался в том, что в чем причина (или философия) за этим? – serdar
вам нужно спросить E.Lippert, я думаю, он ответил бы на что-то вроде «если вы используете динамический, компилятор больше не отвечает за проверку переменной или любого задействованного выражения». –