当前位置:  开发笔记 > 编程语言 > 正文

为什么公开List <T>被认为是不好的?

如何解决《为什么公开List<T>被认为是不好的?》经验,为你挑选了3个好方法。

根据FXCop,List不应该在API对象模型中公开.为什么这被认为是不好的做法?



1> Jon Limjap..:

我同意这里的驼鹿:List是一个不受约束的,膨胀的物体,里面有很多"包袱".

幸运的是,解决方案很简单:IList相反,暴露.

它暴露了一个具有大多数List方法(除了类似的东西AddRange())的准系统接口,并且它不会限制您使用特定List类型,这允许您的API使用者使用他们自己的自定义实现者IList.

为了获得更大的灵活性,请考虑IEnumerable在适当的时候公开一些集合.


仅仅因为你使用IList ,并不意味着你保存任何内存,如果这是你得到的.使用新的List ()实例化它,IList 变量仍然指向内存中的List .除此之外,我认为封装集合通常是有益的,而不是直接暴露给客户端代码.
但要注意`IList`.[`Array`也实现`IList`](http://stackoverflow.com/q/5968708/210336)并将在`Add`和`Remove`上抛出异常.这可能令人困惑,因为很多人都不会期待这一点.

2> e11s..:

主要有两个原因:

List 是一种相当臃肿的类型,许多成员在许多场景中都不相关(对于公共对象模型来说太"忙").

该类是未密封的,但没有专门设计为扩展(您不能覆盖任何成员)


非常正确.以下是关于Kr​​zysztof Cwalina的链接:http://blogs.msdn.com/kcwalina/archive/2005/09/26/474010.aspx

3> Scott Wisnie..:

如果您正在编写将被数千或数百万开发人员使用的API,那么这只被认为是不好的做法.

.NET框架设计指南适用于Microsoft的公共API.

如果您的API没有被很多人使用,您应该忽略该警告.


虽然一些FxCop规则确实是框架设计指南,并且可能不适合某些项目,但即使是为小型团队设计的库也可以从遵循它们中受益.您是否告诉过5位开发人员他们将不得不改变他们的项目,因为您需要对库进行重大更改(比如观察@Kaagle提到的更改)?您的团队中的开发人员是否曾做过您不期望的事情,例如修改您打算只读的列表属性的内容?
如果指南在您的情况下没有意义,请在FxCop项目中禁用它 - 但请查看[指南原因](http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613 )先仔细一点.
推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有