这是我当前的代码(.net core(:
箱子代码:
class Box { }
特殊框代码:
class SpecialBox : Box { }
堆栈代码:
interface Stack<T> where T : Box
{
AnotherInterface<T> TheFunction();
}
特殊堆栈代码:
class SpecialStack : Stack<SpecialBox> { }
堆栈持有人代码:
class StacksHolder
{
private List<Stack<Box>> Stacks = new List<Stack<Box>>();
}
这是我得到的错误:
如果我尝试将 SpecialStack 添加到堆栈持有者中的堆栈列表中,我会收到以下错误:
无法从"特殊堆栈"转换为"堆栈">
我为此使用的代码:
class StacksHolder
{
private List<Stack<Box>> Stacks = new List<Stack<Box>>();
public StacksHolder()
{
Stacks.Add(new SpecialStack());
}
}
有谁知道为什么这不起作用? 如果有人能解释我,如何解决它,我会很高兴。
提前感谢!
我可以通过将out
关键字添加到Stack
和AnotherStack
两个接口来解决我的问题。
谢谢@Lee带我找到解决方案!
解决方案代码:
堆栈代码:
interface Stack<out T> where T : Box
{
AnotherInterface<T> TheFunction();
}
另一个接口代码:
interface AnotherInterface<out T> where T : Box
{
}