MakeGenericMethod / MakeGenericType на Xamarin.iOS
Я пытаюсь понять, что на самом деле означают ограничения при развертывании iOS из Xamarin.
http://developer.xamarin.com/guides/ios/advanced_topics/limitations/
У меня сложилось впечатление, что у вас нет JIT и, следовательно, любой MakeGenericMethod или MakeGenericType НЕ будет работать, так как это потребует JIT-компиляции.
Также я понял, что при работе на симуляторе эти ограничения не применяются, так как симулятор не работает в режиме полного AOT (Ahead of Time).
После настройки моего Mac, чтобы я мог развернуть его на своем телефоне, я, за исключением следующего теста, проваливался при работе на реальном устройстве (iPhone).
[Test]
public void InvokeGenericMethod()
{
var method = typeof(SampleTests).GetMethod ("SomeGenericMethod");
var closedMethod = method.MakeGenericMethod (GetTypeArgument());
closedMethod.Invoke (null, new object[]{42});
}
public static void SomeGenericMethod<T>(T value)
{
}
private Type GetTypeArgument()
{
return typeof(int);
}
Дело в том, что все завершается успешно, и я не могу понять, почему. Разве этот код не требует JIT-компиляции?
Чтобы «сломать», я также провел тест с MakeGenericType.
[Test]
public void InvokeGenericType()
{
var type = typeof(SomeGenericClass<>).MakeGenericType (typeof(string));
var instance = Activator.CreateInstance (type);
var method = type.GetMethod ("Execute");
method.Invoke (instance, new object[]{"Test"});
}
public class SomeGenericClass<T>
{
public void Execute(T value)
{
}
}
Как это может работать, когда нет JIT?
Я что-то пропустил ?