在代码审查期间,建议按如下方式实现我的 INotifyPropertyChanged
:
public string Prop
{
get{return _prop;}
set
{
if(_prop == value) return;
_prop = value;
OnPropertyChanged(()=>Prop);
}
}
有问题的行是:
if(_prop == value) return;
我的问题是这是否真的有必要?我刚遇到一个情况,如果组合框的 OnPropertyChanged
返回相同的引用,则框架会忽略它(不过我不确定这是否全面正确?)。
如果没有真正产生影响,我个人认为没有必要添加额外的代码困惑。 INotifyPropertyChanged
的框架实现是否使 if (_prop == value) return;
无关紧要或多余?除了框架实现之外,这种微优化是否有必要作为起点?
最佳答案
通常,接口(interface)是具有语义意义而非纯技术意义的契约。在 INotifyPropertyChanged 的情况下,语义含义正是它听起来的样子——实现该接口(interface)的对象会在属性发生更改时通知您。
“改变”这个词是关键。是的,许多订阅 INotifyPropertyChanged 事件的类可能以这样的方式编写,即它们将"new"值与之前的值进行比较,如果它实际上没有改变,它们就什么都不做。不过,这不是您应该依赖的东西 - 如果您在属性没有更改时触发事件,那是您的代码不正确。
如果客户端代码确实执行自己的检查以判断该值是否实际发生了变化,那就是它们非常谨慎,但它们不是必需的,也不应期望它们这样做。
简短版本:是的,请检查您的 INotifyPropertyChanged 实现。不要指望客户端代码为您执行检查。
关于c# - 如果值与当前属性相同,INotifyPropertyChanged 标准实现是否包含空操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22664459/