C# 为什么不在VB.NET中公开web服务参数中的列表(字符串)?

C# 为什么不在VB.NET中公开web服务参数中的列表(字符串)?,c#,.net,vb.net,list,fxcop,C#,.net,Vb.net,List,Fxcop,可能重复: FxCop在一项规定中表示,通用列表不应对外公开 但我不明白为什么,什么是通用清单的替代品 参考:始终公开对象层次结构中适合您场景的最低基类/接口。例如,如果此属性的使用者仅对其进行迭代,请使用IEnumerable(of T)。通过公开一个列表,您可以让客户端代码访问类的实现细节,从而破坏了封装。通用列表是一个.NET构造,然而,web服务通常旨在与其他框架进行互操作。原因是使用具体的列表是为了实现细节,而您的目的是公开更抽象的内容,例如IEnumerable或ICollecti

可能重复:

FxCop在一项规定中表示,通用列表不应对外公开

但我不明白为什么,什么是通用清单的替代品


参考:

始终公开对象层次结构中适合您场景的最低基类/接口。例如,如果此属性的使用者仅对其进行迭代,请使用
IEnumerable(of T)
。通过公开一个
列表
,您可以让客户端代码访问类的实现细节,从而破坏了封装。

通用列表是一个.NET构造,然而,web服务通常旨在与其他框架进行互操作。

原因是使用具体的
列表
是为了实现细节,而您的目的是公开更抽象的内容,例如
IEnumerable
ICollection
,仅表示要公开的功能(例如可枚举、可变和/或可索引)。这为您以后更改实现提供了灵活性


实际上,此警告通常通过返回
IList
而不是
List
来解决,但其目的是提示您考虑“我实际需要什么功能来保证我的呼叫者?”例如,可能我应该返回
IEnumerable
ReadOnlyCollection
,因为我不希望我的呼叫者干扰返回的集合。

为什么?“web服务通常旨在与其他框架进行互操作。”请阅读。这不是最好的解释,但它确实回答了原因。不,我没有,你想让我这样做吗?Web服务通常被设计成可互操作的,在集成异构系统时用作松散耦合的RPC机制。+1不得不想一想,但我明白你的意思。但该列表将通过soap作为字符串列表发送,webmethod使用的witch集合类/接口的参数。