gpt4 book ai didi

c# - 实现 INotifyPropertyChanged 时,C# 中的 [NotifyPropertyChangedInvocator] 是什么?

转载 作者:IT王子 更新时间:2023-10-29 04:01:03 31 4
gpt4 key购买 nike

我看到了 INotifyPropertyChanged 的两种实现方式

  • 第一个:

    public abstract class ViewModelBase : INotifyPropertyChanged
    {
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
    handler(this, new PropertyChangedEventArgs(propertyName));
    }
    }
    }
  • 第二个:

    public abstract class ViewModelBase : INotifyPropertyChanged
    {
    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
    handler(this, new PropertyChangedEventArgs(propertyName));
    }
    }
    }

在第二个中,您会看到方法 OnPropertyChanged 上有一个额外的属性 [NotifyPropertyChangedInvocator]

在我的例子中,两者的行为相同,但是什么、为什么以及何时使用此 [NotifyPropertyChangedInvocator],这样做有什么好处?我在互联网上搜索过,但找不到任何好的答案。

最佳答案

这是来自他们的 Annotations 的 Resharper 属性- 旨在给你警告然后你的代码看起来可疑:)
考虑一下:

public class Foo : INotifyPropertyChanged 
{
public event PropertyChangedEventHandler PropertyChanged;

[NotifyPropertyChangedInvocator]
protected virtual void NotifyChanged(string propertyName) { ... }

private string _name;
public string Name {
get { return _name; }
set {
_name = value;
NotifyChanged("LastName");//<-- warning here
}
}
}

NotifyChanged 方法上使用 [NotifyPropertyChangedInvocator] 属性 Resharper 会给你一个警告,你正在用一个 (大概)错误的值(value)。

因为 Resharper 现在知道应该调用那个方法来发出更改通知,所以它将帮助您将普通属性转换为带有更改通知的属性: Visual Studio Screenshot showing ReShaper suggestions
将其转换为:

public string Name
{
get { return _name; }
set
{
if (value == _name) return;
_name = value;
NotifyChange("Name");
}
}



此示例来自此处找到的关于 [NotifyPropertyChangedInvocator] 属性的文档:
enter image description here

关于c# - 实现 INotifyPropertyChanged 时,C# 中的 [NotifyPropertyChangedInvocator] 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23213146/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com