属性 getter 中的逻辑

Jan*_* Go 5 c# properties

对于属性获取者来说,多少逻辑太多了?例如,我有如下代码:

        public double value
        {
            get
            {
                if (condition1
                    || condition2
                    || condition3
                    || condition4)
                {
                    _value = anotherValue;
                }
                return _value;
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

Seb*_*icz 5

一般来说,在 OOP 中,getter(setter 也是)应该是一个微不足道的操作。您在上面发布的内容是微不足道的,具体取决于实际情况

您提到“昂贵”对您来说是一个模糊的术语。计算成本高的操作意味着需要很长时间才能完成(通常是因为它必须完成大量计算——这过于简单化,但近似值不错)。例如,考虑:

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

在这个例子中,条件是微不足道的,你的程序将几乎瞬间处理这个块。另一方面:

if (some_slow_function())
{
    _value = anotherValue;
}
return _value;
Run Code Online (Sandbox Code Playgroud)

假设 some_slow_function 确实运行缓慢,这个块将需要很长时间返回_value,使其不再微不足道。如果这个 getter 经常被调用,some_slow_function也会经常被调用,导致它成为你的程序的瓶颈并导致它运行缓慢。