繁体   English   中英

协变接口不可能包含类型参数是协变类型的泛型类型吗?

[英]Is it not possible to have a covariant interface contain a generic type who's type parameter is the covariant type?

我有一个协变接口和不相关的通用 class 。 我希望协变接口有一个属性,它是协变类型上通用 class 的实例,就像这样。

public interface IFoo<out T>
{
    Bar<T> barobj { get; set; }
}

public class Bar<T>
{
}

不幸的是,我遇到了一个错误

错误 CS1961 无效方差:类型参数“T”必须在“IFoo<T>.barobj”上始终有效。 “T”是协变的。

这是否意味着不可能有一个具有使用协变类型作为参数的泛型类型的协变接口? 我在这里做错了吗?

一个接口只有在它只允许泛型类型的输出时才能是协变的。 您的界面不是协变的,因为您可以设置barobj的值。 如果您将属性设为只读,则如果barobj是协变的,它可以是协变的。 这意味着您需要Bar的协变接口:

public interface IFoo<out T>
{
    IBar<T> barobj { get; }
}

public class Bar<T> : IBar<T>
{
}

public interface IBar<out T> 
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM