【问题标题】:MonoTouch and supporting variant generic interfacesMonoTouch 和支持变体通用接口
【发布时间】:2012-12-30 18:23:58
【问题描述】:

以下示例在常规 Mono 2.10.9 中编译良好:

namespace covarianttest
{
    public interface ITest<out T> : IEnumerable<T>
    {
    }
}

但是,当我尝试针对 MonoTouch 6.0.8 进行编译时,我收到此错误:

错误 CS1961:协变类型参数“T”必须在“covarianttest.ITest”上始终有效

那么我是否可以假设 MonoTouch 还不支持扩展协变/逆变泛型接口?如果是这样,在 MonoTouch 中针对这种情况的推荐解决方法是什么?

【问题讨论】:

    标签: generics xamarin.ios covariance contravariance


    【解决方案1】:

    这实际上取决于编译器(和配置文件/运行时)而不是 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 的未来版本(可能在今年春天于 2013 年初推出 alpha/beta)将提供 4.0/4.5 运行时和编译器。

    【讨论】:

    • 所以你是说MonoTouch目前不支持Co/Contra-variance,未来的某个时候可能对吗?
    • 是的,大多数 .NET/CLR 4.x 功能在 MonoTouch 中不可用,但一旦 MT 基于 Mono 3.0(以及新的 @987654324 @编译器)。
    • 糟糕的是,新版本尚未修复此问题。我写了一个类似 WPF 的框架,它使用了绑定,我不能在 IEnumerable&lt;Object&gt; 上强制转换,这很糟糕,我现在必须使用 IEnumerable。但更烦人的是当你想使用 Object 以外的其他类型时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多