0

采取以下代码:

private var m_iQuanitity:int;
public function get quantity():int
{
    return m_iQuantity;
}

这似乎完全有道理。您可以毫无问题地从外部课程中看到数量是多少,但您根本无法真正弄乱它。现在采取以下代码:

private var m_acUsers:ArrayCollection = new ArrayCollection();
public function get users():ArrayCollection
{
    return m_acUsers;
}

在这种情况下,您不能真正直接设置变量,但您仍然可以对它进行几乎所有其他事情,而不会出现任何问题。您可以调用它的 AddItem 和 RemoveItemAt 函数,它们可以做很多事情来“设置”变量。

Does it still make sense to do this? I know you can create a duplicate ArrayCollection and just pass the duplicate back to avoid allowing it to be set, but doing stuff like that all over the place, purely for defensive programming, can waste a lot of CPU time. So I guess I'm asking if it still makes sense anyway, how so, and if I'm missing the point of using get and set completely? Thanks!

4

1 回答 1

2

从语法上讲,您所拥有的没有任何问题,但是第二个示例确实打破了“获取”的概念,因为它不仅仅是一个只读属性。如果您需要遵守只读策略,那么您已经打破了它,因为现在您可以操作 ArrayCollection。

最后,它归结为你要做什么。您可以更改值对项目是否重要?如果您正在与多人一起处理一个项目,则这种类型的编码将要求您添加评论或让您解释您在做什么。当你做一些超出常规的事情时,这可能会增加混乱,所以最好简化并坚持预期,避免解释一些事情。

此外,我可以想到几种可能导致问题的方法 - 如果您将返回的属性传递给其他不知道它来自何处的类并且原始类中的内部代码失败,则更改函数外部的值。

于 2012-11-14T14:13:27.680 回答