Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在返回接口时返回更少/更具体接口的OO最佳实践_Oop - Fatal编程技术网

Oop 在返回接口时返回更少/更具体接口的OO最佳实践

Oop 在返回接口时返回更少/更具体接口的OO最佳实践,oop,Oop,这个标题有点棘手。。。 当我编写一个接口时,通常最好的做法是返回最具体的接口,或者至少返回一个接口 例如,假设 interface List2<T> extends List<T> { List<T> getRange(int startIndex, int endIndex); } 接口列表2扩展列表 { 列出getRange(intstartindex、intendindex); } 换成这样会更好吗 interface List2<T&

这个标题有点棘手。。。 当我编写一个接口时,通常最好的做法是返回最具体的接口,或者至少返回一个接口

例如,假设

interface List2<T> extends List<T>
{
    List<T> getRange(int startIndex, int endIndex);
}
接口列表2扩展列表
{
列出getRange(intstartindex、intendindex);
}
换成这样会更好吗

interface List2<T> extends List<T>
{
    List2<T> getRange(int startIndex, int endIndex);
}
接口列表2扩展列表
{
列表2 getRange(intstartindex、intendindex);
}

这样调用者就可以对结果调用
getRange
,同时仍然以多态方式匹配列表?

如果代码变化很大(通常在开发过程中),我会返回最具体的接口,并在需要时使其更广泛。通过这种方式,您鼓励不要经常使用接口,并且如果您决定以后删除或彻底更改接口,则更容易进行更改


如果代码是稳定的,或者是要发布的API的一部分,我会返回最广泛的接口,以使其可供最大的受众使用。

返回最具体的类型会给您带来最大的受众。任何想要IEnumerable的人都可以使用IList,但反过来就不行了,所以我不明白为什么以后要扩展返回类型。