保持类状态有效vs .性能

本文关键字:vs 性能 有效 状态 | 更新日期: 2023-09-27 17:50:37

如果我有返回引用类型值的公共方法,这是当前类中的私有字段,我需要返回它的副本吗?在我的情况下,我需要返回列表,但这个方法经常被调用,我的列表持有~100项。关键是,如果我返回相同的变量,每个人都可以修改它,但如果我返回一个副本,性能就会下降。在我的情况下,我试图生成数独表,这不是一个快速的过程。内部类sudoktable保存这些值及其可能的值。公共类SudokuGame处理UI请求并生成/解决SudokuTable。选择性能而不是OOP原则是好的实践吗?如果有人想使用我的sudoktable类创建另一个库,他不会意识到他可以通过修改它返回的List来中断它的状态。

保持类状态有效vs .性能

性能和面向对象编程并不是相互排斥的——你的代码可能是面向对象的,但性能却很差,等等。

如果你在这里陈述,我不认为允许外部部分编辑事物的内部状态是明智的,所以我会返回条目的数组或ReadOnlyCollection(这可能是使用ObservableCollection和监视越界篡改的潜在可能性,并相应地"处理"(例如,异常或其他)-不确定这将是多么可取)。

从那里,您可以考虑如何公开对这些条目的访问,尽量减少调用者在查找并返回特定集合时获取完整集合的需要。

值得注意的是,不可编辑的集合并不一定意味着不能修改状态;如果条目是由引用类型而不是值类型表示的,那么返回一个条目会使容易被篡改(这可能取决于类定义),因此您最好使用结构体作为条目类型。

总之,如果没有一个具体的例子来说明你在哪里遇到了问题,这就有点主观和理论性了。你试过限制收款吗?如果有,表现如何?问题在哪里?等等