保持班级状态对性能有效

时间:2014-03-15 23:06:43

标签: c# oop concept

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

1 个答案:

答案 0 :(得分:3)

性能和面向对象的编程并不是相互排斥的 - 您的代码可以是面向对象的,并且性能很差等。

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

从那里,您可以考虑如何公开对这些条目的访问权限,尝试最小化调用者获取完整集合的需要,只需查找并返回特定条目即可。

值得注意的是,不可编辑的收藏并不一定意味着国家也不能改变;如果条目由引用类型而不是值类型表示,则返回一个条目会使 打开以进行篡改(可能,取决于类定义),因此您可能最好使用结构入门类型。

最后,在没有具体问题的情况下,这一点在目前有点主观和理论上。你试过限制收藏吗?如果是这样,表现如何?问题在哪里?等等。