c# – 如何决定api签名
作者:互联网
很多时候,在编写接受可枚举类型的函数时,我会遇到这种混乱.从以下选项中,哪种api暴露会更好:
public void Resolve(Func<bool>[] howtos)
public void Resolve(IEnumerable<Func<bool>> howtos)
public void Resolve(List<Func<bool>> howtos)
我通常根据以下内容做出决定:
如果需要通过添加或删除项来修改输入,则使用List,否则使用IEnumerable.不确定Array选项.
在决定暴露api时是否还需要考虑其他问题?是否有任何经验法则可以清楚地确定哪种情况应优先于另一种情况?
谢谢
解决方法:
您应始终接受限制最少的参数类型.
这意味着IEnumerable< T>,ICollection< T>或IList< T>.
这样,客户端可以自由地传递任何类型的实现,例如数组,HashSet< T>或ReadOnlyCollection< T>.
具体来说,你应该采用IEnumerable< T>如果您只需要迭代数据,ICollection< T>如果您还想添加或删除项目,或者您需要知道大小,则IList< T>如果你需要随机访问(索引器).
标签:c,net,class-design,api 来源: https://codeday.me/bug/20190614/1237921.html