首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不可能有一个协变接口包含一个泛型类型,其类型参数是协变量类型吗?

不可能有一个协变接口包含一个泛型类型,其类型参数是协变量类型吗?
EN

Stack Overflow用户
提问于 2021-04-09 17:06:31
回答 1查看 75关注 0票数 0

我有一个不相关的协变接口和泛型类。我希望协变量接口具有一个属性,它是协变量类型上的泛型类的实例,如下所示。

代码语言:javascript
运行
复制
public interface IFoo<out T>
{
    Bar<T> barobj { get; set; }
}

public class Bar<T>
{
}

不幸的是我搞错了

Error CS1961无效方差:类型参数'T‘在'IFoo.barobj’上必须不变有效。不‘是协变的。

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

EN

回答 1

Stack Overflow用户

发布于 2021-04-09 17:31:43

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

代码语言:javascript
运行
复制
public interface IFoo<out T>
{
    IBar<T> barobj { get; }
}

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

public interface IBar<out T> 
{
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67025417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档