【问题标题】:Logic in property getters [closed]属性获取器中的逻辑[关闭]
【发布时间】:2016-04-04 13:15:41
【问题描述】:

对于属性 getter 来说,多少逻辑太多了? 例如,我的代码如下所示:

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

我读过各种帖子,说属性内的代码不应该很昂贵。但是“昂贵”这个词对我来说有点模糊。

【问题讨论】:

    标签: c# properties


    【解决方案1】:

    一般来说,在 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 也会被频繁调用,导致它成为你程序的瓶颈并导致它运行缓慢。

    【讨论】:

    • 条件将从另一个类中获取一些(布尔)字段。这仍然是微不足道的吗?
    • @PaoloGo:假设这些字段使用的 getter 计算成本也不高,那么你很好。
    • 好的。谢谢!我尝试使用模拟类对其进行测试,并且 if 块不会影响 getter 的性能。我想这一切都将归结为实际“另一个”类的字段获取器的实现。
    【解决方案2】:

    MSDN 说:

    属性是提供灵活读取机制的成员, 写入或计算私有字段的值。可以使用属性 好像它们是公共数据成员,但它们实际上是特殊的 称为访问器的方法。这样可以轻松访问数据 同时仍然提供方法的安全性和灵活性。

    只要您的 Property getter 是幂等的并且执行速度快(即不会造成任何性能瓶颈)就可以了。

    【讨论】:

    • @PatrickHofman:- 快速,我的意思是如果它没有造成任何性能瓶颈!
    【解决方案3】:

    只要没有等待或更改值逻辑就可以使用。您还应该注意不要有太多例外。通用的还行,定制的就太多了。

    Getter 旨在即时工作。有了这一点,你的逻辑就有限了。保持安全,它会立即生效,然后就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2013-03-15
      相关资源
      最近更新 更多