gpt4 book ai didi

c# - 泛型接口(interface)的非泛型类实现不被继承

转载 作者:行者123 更新时间:2023-11-30 20:01:22 24 4
gpt4 key购买 nike

如果我有这段代码:

public interface IThing<T> where T : class
{
// ...
}

public class BaseThing<T> : IThing<T> where T : class
{
// ...
}

public class ThingA : BaseThing<string>
{
// ...
}

public class ThingB : BaseThing<Uri>
{
// ...
}

此代码失败:

List<IThing<object>> thingList = new List<IThing<object>>();

thingList.Add(new ThingA());
thingList.Add(new ThingB());

尽管ThingA (间接)继承自(并且应该是其实例)IThing<T> .为什么?是ThingA/ThingB不是 IThing<T> 的实例?

最佳答案

这需要您的界面是协变的。有关详细信息,请参阅 Covariance and Contravariance in Generics .

在这种情况下,您可以使用:

// Add out here
public interface IThing<out T> where T : class
{
}

请注意,这确实限制了界面以及您可以使用它做什么,但是,因为它需要类型 T在接口(interface)中仅用作接口(interface)内的方法返回类型,而不用作形式方法参数的类型。

如果这不可行,另一种选择是创建一个非通用的 IThing界面,并有IThing<T>实现 IThing .然后你可以使用 List<IThing>供您收藏。

关于c# - 泛型接口(interface)的非泛型类实现不被继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com