我有一个不相关的协变接口和泛型类。我希望协变量接口具有一个属性,它是协变量类型上的泛型类的实例,如下所示。
public interface IFoo<out T>
{
Bar<T> barobj { get; set; }
}
public class Bar<T>
{
}不幸的是我搞错了
Error CS1961无效方差:类型参数'T‘在'IFoo.barobj’上必须不变有效。不‘是协变的。
这是否意味着不可能拥有使用协变量类型作为参数的泛型类型的协变量接口?我在这里做错什么了吗?
发布于 2021-04-09 17:31:43
只有当接口只允许泛型类型的输出时,它才能是协变的。您的接口不是协变量,因为您可以设置barobj的值。如果将属性设置为只读,那么如果barobj是协变的,则它可以是协变量。因此,这意味着您需要一个Bar的协变接口。
public interface IFoo<out T>
{
IBar<T> barobj { get; }
}
public class Bar<T> : IBar<T>
{
}
public interface IBar<out T>
{
}https://stackoverflow.com/questions/67025417
复制相似问题