下面的示例在常规 Mono 2.10.9 中可以正常编译:
namespace covarianttest
{
public interface ITest<out T> : IEnumerable<T>
{
}
}
但是,当我尝试针对 MonoTouch 6.0.8 编译它时,我收到此错误:
错误 CS1961:协变类型参数“T”必须在“covarianttest.ITest”上始终有效
那么我是否可以假设 MonoTouch 还不支持扩展协变/逆变通用接口(interface)?如果是这样,在 MonoTouch 中针对这种情况建议的解决方法是什么?
最佳答案
这实际上取决于编译器(和配置文件/运行时)而不是 Mono 版本。 IOW 有些功能可能适用于 Mono 2.10,但不适用于 MonoTouch 6.x。
当前版本的 MonoTouch 附带了 smcs
编译器和基于 2.1 的配置文件(主要是 Silverlight 和一些 .NET 4.0 附加功能)。
协方差等新功能需要完整的 4.0 编译器(例如 Mono 2.10 中的 dmcs
或 Mono 3.0 中的 mcs
)和运行时。
MonoTouch 的 future 版本(可能在今年 Spring ,2013 年初推出 alpha/beta)将提供 4.0/4.5 运行时和编译器。
关于generics - MonoTouch 和支持变体通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14093332/