Why not expose List(Of String) in the parameters of web service in VB.NET?
Possible Duplicate:
C#: Difference between List and Collection (CA1002, Do not expose generic lists)
fxcop在一条规则中说,通用列表不应该暴露于外部世界。
但是我不明白为什么和什么是基因表的替代品?
参考:http://msdn.microsoft.com/en-in/library/ms182142%28en-us%29.aspx
原因是使用具体的List是为了实现细节,而您要公开一些更抽象的东西,例如IEnumerable或ICollection,它们只表示您想要公开的功能(例如可枚举、可变和/或可索引)。这为您以后更改实现提供了灵活性。
实际上,这个警告通常是通过返回IList而不是List来解决的,但其目的是让您思考"我实际上需要什么功能来保证我的呼叫者?"例如,也许我应该退回IEnumerable或ReadOnlyCollection,因为我不希望我的呼叫者弄乱退回的托收。
- +1解释得很好:)
- + 1是的。得到一个。
- 喜欢这个解释
始终公开对象层次结构中适合您的方案的最低基类/接口。例如,如果此属性的使用者将只迭代它,请使用IEnumerable(Of T)。通过公开一个List,您将通过让客户机代码访问类的实现细节来破坏封装。
通用列表是.NET结构,但是Web服务通常旨在与其他框架互操作。
- 你没有解释原因。
- 为什么?"Web服务通常旨在与其他框架互操作。"请阅读。不是最好的解释,但它确实回答了为什么。
- 不,我没有,你要我吗?
- 问题是为什么。
- Web服务通常被设计为可互操作的,在集成异构系统时用作松散耦合的RPC机制。
- +我不得不考虑一下,但我明白你的意思。
- 但该列表将通过SOAP作为字符串列表发送,它是WebMethod使用的witch集合类/接口的重新参数。