Вы должны помнить, что вам, возможно, также понадобится место для строки состояния In-Call или строки состояния Tethering. эта полоса имеет высоту 20 пикселей. Даже яблоко не делает это правильно. Переведите вызов в режим ожидания и запустите приложение «Фотографии» или «Погода», и вы поймете, что я имею в виду. Чтобы проверить это, вы можете использовать меню «Переключить строку состояния вызова» в приложении iPhone Simulator.
В общем, я понимаю, что результат должен (по возможности) быть таким же, как если бы вы скомпилировали тот же код с только динамические выражения, замененные на выражения типа, которое динамическое значение имеет во время выполнения. (Статически известные типы сохраняются в информации о сайте вызова.)
В этом конкретном случае, имея только ваш код с .NET 4.0b1, результат будет:
Bar(int) says: 0
Однако, посмотрев на это еще раз (и проверив, какие бит на самом деле динамический) я немного запутался. Я думаю, что это одна из тех ситуаций, когда мне пришлось бы очень внимательно изучить спецификацию, чтобы понять, каково правильное поведение. К сожалению, я не знаю, когда будет доступна спецификация C # 4.0.
Об этом сложно рассуждать, и я подозреваю, что ключевым моментом является то, может ли связующее во время выполнения определить, что значение имеет тип T
для того же T
, что и получатель, а не тип ] int
. Поскольку приемник в этом случае является динамическим, компилятор вообще не выполняет никакого разрешения перегрузки. Хм. Хитрый, определенно.