Разрешение перегрузки в C# 4.0 с помощью динамических типов

Вы должны помнить, что вам, возможно, также понадобится место для строки состояния In-Call или строки состояния Tethering. эта полоса имеет высоту 20 пикселей. Даже яблоко не делает это правильно. Переведите вызов в режим ожидания и запустите приложение «Фотографии» или «Погода», и вы поймете, что я имею в виду. Чтобы проверить это, вы можете использовать меню «Переключить строку состояния вызова» в приложении iPhone Simulator.

6
задан LBushkin 12 June 2009 в 15:19
поделиться

1 ответ

В общем, я понимаю, что результат должен (по возможности) быть таким же, как если бы вы скомпилировали тот же код с только динамические выражения, замененные на выражения типа, которое динамическое значение имеет во время выполнения. (Статически известные типы сохраняются в информации о сайте вызова.)

В этом конкретном случае, имея только ваш код с .NET 4.0b1, результат будет:

Bar(int) says: 0

Однако, посмотрев на это еще раз (и проверив, какие бит на самом деле динамический) я немного запутался. Я думаю, что это одна из тех ситуаций, когда мне пришлось бы очень внимательно изучить спецификацию, чтобы понять, каково правильное поведение. К сожалению, я не знаю, когда будет доступна спецификация C # 4.0.

Об этом сложно рассуждать, и я подозреваю, что ключевым моментом является то, может ли связующее во время выполнения определить, что значение имеет тип T для того же T , что и получатель, а не тип ] int . Поскольку приемник в этом случае является динамическим, компилятор вообще не выполняет никакого разрешения перегрузки. Хм. Хитрый, определенно.

6
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: