我是否应该提供带有名称的成员名称的方法,还是应该依靠Callermembername为我做



如何实现callermembername?

我得到了它的作用 - 它使我们能够将魔术字符串远离代码 - 但是应该在nameof上使用它,还有什么更有性能?

callermembername有什么区别/如何工作?

CallerMemberName是将当前成员的名称放置在呼叫中的编译时间技巧。nameof也是做类似事情的编译时间技巧:它需要成员的字符串表示。

要使用的是您。我会说:使用CallerMemberName,以及您必须在哪里使用nameofCallerMemberNamenameof更自动,所以这就是为什么我更喜欢那个。

两者都具有相同的性能含义:只有在编译时间上,评估代码才需要一些额外的时间,但这是可以忽略的。

[CallerMemberName]nameof不完全互换。有时您需要第一个,有时是 - 第二个,即使我们谈论相同的方法:

class Foo : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    private string title;
    public string Title
    {
        get { return title; }
        set
        {
            if (title != value)
            {
                title = value;
                // we're using CallerMemberName here
                OnPropertyChanged();
            }
        }
    }
    public void Add(decimal value)
    {
        Amount += value;
        // we can't use CallerMemberName here, because it will be "Add";
        // instead of this we have to use "nameof" to tell, what property was changed
        OnPropertyChanged(nameof(Amount));
    }
    public decimal Amount { get; private set; }
}

相关内容

  • 没有找到相关文章

最新更新