【发布时间】:2012-11-23 06:58:57
【问题描述】:
首先我应该说我是一个非常喜欢接口的菜鸟,所以这可能是一个非常愚蠢的问题。如果我的标题不清楚,也很抱歉 - 符合我的心态!
我确实了解接口背后的原理,并且我想在这里使用它们来支持单元测试以及通过 DI 框架在极其混乱且无法测试的遗留代码中解耦。
我有一个名为 IDatHandler 的接口。它有一个名为 Items 的 List 属性。具体实现应该返回一个具体类型的 IDatContainer。当然有一些方法,但我把它们排除在外
public interface IDatHandler
{
....
List<IDatContainer> Items
{
get; set;
}
}
这是一个具体的实现:
public class ADEColorHandler : IDatHandler
{
....
public List<ADEColor> Items
{
get; set;
}
}
}
ADEColor 实现 IDatContainer。除非我将ADEColor 替换为IDatContainer,否则具体实现会失败。
有没有办法让项目以ADEColor 类型的列表形式返回,还是我只是违反了规则?
我应该说这个应用当前使用的是 NET 3.5
=========>>> 答案 - 谢谢 Charleh!
IDatHandler 接口
public interface IDatHandler<T> where T : IDatContainer
{
....
List<IDatContainer> Items
{
get; set;
}
}
具体类:
public class ADEColorHandler : IDatHandler<ADEColor>
{
....
public List<ADEColor> Items
{
get; set;
}
}
}
我对 ADEColorHandler Assert 的单元测试针对此列表并通过。
【问题讨论】:
-
我希望 ADEColorHandler 实现接口 IDatHandler 但返回一个 ADEColor 列表,而不是必须返回一个 IDatContainer 列表然后让调用者负责转换结果。我知道我可以做这样的事情,但我想知道有更好的方法。
-
只是检查,但
List<IDatContainer>应该真的是List<T>- 可能只是一个错字! -
一切正常 - 谢谢 Charleh