4

使用是否有好处:

private var _someProp:String;

public function set someProp(value:String):void
{
    _someProp = value;
}
public function get someProp():String
{
    return _someProp;
}

而不是仅仅使用:

public var someProp:String;

我意识到,当您需要进一步处理或需要通知属性何时更改时,使用 getter/setter 会很有用,如下所示:

public function set someProp(value:String):void
{
    _someProp = value;
    _somePropChanged = true;
    doSomethingElse();
}

但是,如果您不需要这个,那么是否有任何理由使用 getter/setter 而不是仅使用公共 var?

谢谢!!

4

6 回答 6

4

根据您的语言,您应该更喜欢前面的 getter/setter,因为如果事实证明您确实需要它们,您就不能稍后再介绍它们(我在看你,Java)。

于 2009-12-22T21:38:30.350 回答
1

这实际上取决于您使用的语言/框架/工具包 -

但是,在使用与版本控制和 API 兼容性相关的 getter 和 setter 时,通常会有好处。这可能是使用它们的一个非常有用的理由,所有这些都是单独使用的。

于 2009-12-22T21:38:58.173 回答
1

不懂语言真的无法回答。在大多数语言中,Getter 和 Setter 的成本更高,但它们为您提供了未来的灵活性。在某些语言中,您无法在不更改调用者代码的情况下将 public 更改为 Getter/Setter,因为使用语法发生了变化。但这不是 C# 的问题,我主要用 C# 编写。

Getter 和 Setter 允许您进行参数验证。它们让您延迟创建对象,直到第一次引用。它们有很多优点,当我从一开始就需要其中一个优点时,我就会使用它们。

但是只有当我需要它们时,或者当我很确定我需要灵活性时,我才使用 getter 和 setter。否则我认为它们是臃肿的。

于 2009-12-22T21:54:46.490 回答
0

作为旁注,您可以从公共 var 开始,如有必要,稍后在代码中将其转换为 getter / setter .. 取决于您使用的语言。

于 2009-12-22T21:40:23.693 回答
0

如果您的属性完全是愚蠢的,并且对课程的其余部分没有副作用 - 那么请务必将其公开为公共字段。

只是在很多情况下你的属性会有副作用,所以你需要控制它们的设置和访问方式。

举个简单的例子,如果你的公共变量没有在你的构造函数中设置成某个东西会发生什么?您是否可以将其返回为空?或者您想将此变量设置为某个值而不是返回 null?这是一个简单的例子,自定义 getter 是值得的。

于 2009-12-22T21:49:43.957 回答
0

Getter 和 Setter 还可以让您更好地控制变量可以设置的值。

bool setAge(int age){
   bol retVal = true;

   if(age <= 0)
       retVal = false;

   return retVal;
}

如果没有设置器,值可能会设置为零,并且可能会发生坏事。

于 2009-12-22T21:50:53.907 回答