2

CallerMemberNameはどのように実装されていますか?

私はそれが何をするかを理解しています-それは私たちのコードから魔法の文字列を除外することを可能にします-しかし、それを繰り返し使用する必要があり、nameofよりパフォーマンスの高いものは何ですか?

違いは何ですか / CallerMemberName は正確にどのように機能しますか?

4

2 に答える 2

4

[CallerMemberName]nameof完全に交換可能ではありません。同じメソッドについて話している場合でも、最初のものが必要な場合もあれば、2番目のものが必要な場合もあります。

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; }
}
于 2016-06-21T11:25:27.583 に答える