gpt4 book ai didi

c# - List 应该是私有(private)的吗?

转载 作者:可可西里 更新时间:2023-11-01 08:42:44 24 4
gpt4 key购买 nike

我需要您对此发表意见,因为我已经阅读了很多关于该主题的不同内容。如果你有 List<T>或类声明中的任何类型的列表,您是将其设为私有(private),然后使用特定方法添加或删除项目,还是将其设为公开?

对于每个选项的任何缺点/优点,您的意见将不胜感激。

举个例子,假设我们有一个 class Employer有私有(private)领域nameList<Employees> .我的问题是,我们应该将员工名单设为私有(private)还是公开,以及这两种情况的优缺点是什么。

最佳答案

对于 List 明确是的,它应该是私有(private)的,具体取决于您公开的功能应该做什么,IEnuemerable、ICollection 或 IList 等接口(interface)将是更好的选择,或者如果您要公开一个集合,请参阅 SLaks 回复。

通常暴露内部结构和状态是一个坏主意,因为你的 List 类型的对象是两者,你会希望将它保留在内部。让用户能够对其进行迭代、向其添加或删除项目可能是有意义的,但您仍应将列表保留在内部并公开添加/删除方法或至少公开一个接口(interface),以便可以更改不影响公共(public)接口(interface)的内部表示类型。

此外,如果您使用接口(interface)进行公开,您应该选择尽可能窄的接口(interface)。

所以如果客户端代码只需要枚举就可以了。如果客户端代码需要索引使用 ICollection 等,请使用 IEnumerable。

此外,如果您公开为 IEnumerable,您应该通过使用只读集合类或使用迭代器 block 来确保您返回的内容实际上是只读的

更新后编辑关于你的例子。问问自己,除了雇主之外,任何人都可以改变他的雇员是谁,这有意义吗?对我来说,这就是你已经选择的话。雇主雇用雇员,应该完全控制他/她的雇员是谁。因此,在这种特殊情况下,我会将其保密并公开 Hire(IEmployee employee) 和 Fire(IEmployee employee),这样代码就可以清楚地说明意图

关于c# - List<T> 应该是私有(private)的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com