2016-04-04 38 views
2

属性获取者有多少逻辑太多?例如,我有一个看起来像这样的代码。属性获取者的逻辑

public double value 
    { 
     get 
     { 
      if (condition1 
       || condition2 
       || condition3 
       || condition4) 
      { 
       _value = anotherValue; 
      } 
      return _value; 
     } 
    } 

我已阅读各种帖子,说属性代码不应该很贵。但是'昂贵'这个词对我来说有点模糊。

回答

2

一般来说,在OOP中,一个getter(setter)也应该是一个平凡的操作。你上面发布的内容很简单,取决于实际情况是什么

您提到“昂贵”对您而言是一个模糊的术语。一个操作是在计算上很昂贵意味着它将需要很长时间才能完成(通常是因为它必须完成大量的计算 - 这是过于简单化,而是一个体面的近似)。例如,考虑:

if (a == 5 
    || b == true 
    || c == "FOO!" 
    || d == 3.14159) 
{ 
    _value = anotherValue; 
} 
return _value; 

在这个例子中,条件是微不足道的,并且你的程序将通过这个块几乎即时地收缩。在另一方面:

if (some_slow_function()) 
{ 
    _value = anotherValue; 
} 
return _value; 

假设some_slow_function并实际运行缓慢,该块将需要很长的时间才能返回_value,使得它不再平凡。如果经常调用这个getter,some_slow_function也会经常被调用,导致它阻塞你的程序并导致它运行缓慢。

+0

这些条件将采取另一个类的一些(布尔)字段。这仍然是微不足道的? –

+0

@PaoloGo:假设这些领域使用的getters不算昂贵,那么你很好。 –

+0

好的。谢谢!我试着用模拟类来测试它,if块不会影响getter的性能。我想这一切都将归结为实际的'另一个'类的字段的getter的实现。 –

1

只要没有等待或更改值,就可以使用逻辑。你也应该关心没有太多的例外。一般的都不错,定制的太多了。

吸气剂是为了即时工作。有了这一点,就有了你的逻辑极限。保持安全,它即时运作,然后它可以。

1

MSDN说:

属性是成员提供了一个灵活的机制来读,写 或计算私有字段的值。属性可以使用 就好像它们是公共数据成员一样,但它们实际上是特殊的 称为访问器的方法。这使得数据可以很容易地被访问,同时仍然提供方法的安全性和灵活性。

所以只要你的属性的getter是幂等,并进行快速(即,不产生任何性能瓶颈)它是好的。

+1

定义*快* * –

+0

@PatrickHofman: - 快,我的意思是如果它没有创造任何性能瓶颈! –