Xamarin是一个系统,它将.NET代码完全提前编译(AOT)为禁止数据执行且不能有JIT的平台。本问题不涉及Xamarin,而是关于其文档所做的断言。它在这里声明:
“通用虚拟方法支持受到限制,静态无法确定在所有情况下将调用哪个方法,因此编译器可能会省略其中一些。”
我可能错了,但他们似乎在暗示通过静态分析可能实现的广泛声明,而不仅仅是他们选择在自己的软件中实现的内容。
正如Hans Passant所指出的那样,他们给出的示例实际上并没有展示他们所指的问题,所以我已经将其排除在外。
因此,除了这些明显棘手的特殊情况之外:
- 反射; - 动态生成的代码(在此场景中是非法的); - 涉及值类型的类型参数中的病态循环引用; 和 - 外部程序集;
什么会导致AOT编译器无法处理虚拟泛型方法的情况?
“通用虚拟方法支持受到限制,静态无法确定在所有情况下将调用哪个方法,因此编译器可能会省略其中一些。”
我可能错了,但他们似乎在暗示通过静态分析可能实现的广泛声明,而不仅仅是他们选择在自己的软件中实现的内容。
正如Hans Passant所指出的那样,他们给出的示例实际上并没有展示他们所指的问题,所以我已经将其排除在外。
因此,除了这些明显棘手的特殊情况之外:
- 反射; - 动态生成的代码(在此场景中是非法的); - 涉及值类型的类型参数中的病态循环引用; 和 - 外部程序集;
什么会导致AOT编译器无法处理虚拟泛型方法的情况?