Xamarin 是一个系统,它为不允许数据执行的平台完全提前 (AOT) 编译 .NET 代码,因此不能有 JIT。这个问题不是关于 Xamarin,而是关于它的文档所做的断言。它在这里声明:
通用虚拟方法支持是有限的,不可能静态确定在所有情况下都会调用什么方法,因此编译器可能会忽略其中的一些。
我可能弄错了,但他们似乎暗示了通过静态分析在这里可能实现的广泛陈述,而不仅仅是他们选择在自己的软件中实现的内容。
正如 Hans Passant 恰当地指出的那样,他们给出的例子实际上并没有证明他们所指的问题,所以我将其排除在外。
所以,除了这些绝对棘手的特殊情况:
反射;
动态生成的代码(在这种情况下无论如何都是非法的);
涉及值类型的类型参数中的病态循环引用;和
外国集会;
什么会使 AOT 编译器无法处理虚拟泛型方法案例?