2013-05-16 6 views
2

C# Mono для iOS имеет определенные ограничения из-за требования Apple предварительно скомпилировать код, т. Е. Компиляция JIT не разрешена. Из-за этого такие вызовы, как Reflection.Emit, не поддерживаются. Но мне интересно, можно ли использовать динамику C# в C#, скомпилированном для iOS.Поддерживает ли MonoTouch динамику C#?

Например:

repository.Find (repository.UserName == "Джон");

Здесь «репозиторий» представляет собой динамический объект со статическим методом «Найти» и динамическое свойство «UserName». Этот подход отлично работает на всех современных платформах .NET на базе Windows, я считаю, что он также работает на Mono для Android. Но как насчет MonoTouch? В принципе, не должно быть ограничений для динамического разрешения динамических свойств, основанных на информации о времени выполнения, если только это не является законным ограничением, которое Apple так хорошо вносит.

+3

От http://tirania.org/monomac/archive/2011/Apr-06.html: * Существует одно важное ограничение: динамическая поддержка C# 4.0 не работает, поскольку для ее работы требуется динамическое создание кода. * –

+1

Какая жалость! Но не вся динамика - это генерация кода, не так ли? Или Apple настолько строга, что любой синтаксис языка, не приводящий к прекомпилированным двоичным файлам, запрещен? Спасибо за разъяснение. –

+1

Это мое понимание, да. Apple предварительно одобряет весь код в приложениях iOS; сгенерированный код не существует до тех пор, пока он не будет сгенерирован, поэтому они не смогут его контролировать. –

ответ

3

Последнее, что я проверил, динамический не поддерживается из-за запрета JIT от Apple. Это правда в инструментах Android Xamarin, которые вы можете использовать для динамического ключевого слова, но для Apple требуется предварительно скомпилированный код. Для этих инструментов есть отличный подкаст .NET Rocks, в котором описывается обзор работы с этими различными платформами с помощью этих инструментов.

+2

Спасибо. И вздох :-( –

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