在Property Setter中,只有在价值不同时设置才有利吗?

时间:2009-10-14 14:57:49

标签: c# properties performance

我想知道这段代码有什么好处:

    private int _TestID;
    public int TestID
    {
        get 
        { 
            return _TestID;
        }
        set
        {
            if(_TestID != value)
            {
                _TestID = value;
            }
        }
    }

VS。这样:

    private int _TestID;
    public int TestID
    {
        get 
        { 
            return _TestID;
        }
        set
        {
            _TestID = value;
        }
    }

在我看来,这是以效率的名义进行的(只有设置如果不同),但是测试不会花费那么长(或更长)的初始设置吗?我不确定我是否在这里遗漏了一些东西,但我很乐意听到任何评论和解释。

5 个答案:

答案 0 :(得分:14)

将它与RaisePropertyChanged(“TestID”)(在if中,在设置字段值之后)组合在WPF或其他数据绑定解决方案中常见的事件模式时非常有用。

class Something : INotifyPropertyChanged
{
      public int TestID 
      {
           get { return testId; }
           set 
           {
                if (testId != value)
                {
                     testId = value;
                     RaisePropertyChangedEvent("TestID");
                }
           }
      }
 }

答案 1 :(得分:1)

这是我很乐意留给编译器的优化类型。我不愿意“强迫”在每种情况下可能会或可能不会产生效率。

答案 2 :(得分:0)

真的,我认为第一个例子在涉及复杂类型和运算符重载时会引起更多问题。在这种特殊情况下,第一个例子毫无意义。

答案 3 :(得分:0)

如果性能是这里唯一的问题,我会选择第一个....即使性能有所不同,也会太小而无法注意到。

这也是不必要的代码行扩展。

答案 4 :(得分:0)

我认为您提供的示例代码并不完全正确。 你是说这个吗?

private int _TestID;
public int TestID
{
    get
    {
        return _TestID;
    }
    set
    {
        if (_TestID != value)
        {
            _TestID = value;
        }
    }
}

这种结构的原因我也不清楚。但是,如果 _TestID 属性而不是 int ,那么这种构造可能会有所帮助,因为设置 _TestID 可以这种情况很昂贵。