首页 > 解决方案 > 为什么这个方法返回一个布尔值?

问题描述

为什么从 SetProperty 返回 bool?它没有被使用。

这是来自 Xamarin.Forms 模板的样板代码。

它也没有在继承的类中使用。


public class BaseViewModel : INotifyPropertyChanged
{
    private bool isBusy = false;
    public bool IsBusy
    {
        get { return isBusy; }
        set { SetProperty(ref isBusy, value); }
    }

    protected bool SetProperty<T>(ref T backingStore,
                                  T value,
                                  [CallerMemberName] string propertyName = "",
                                  Action onChanged = null)
    {
        if (EqualityComparer<T>.Default.Equals (backingStore, value))
            return false;

        backingStore = value;
        onChanged?.Invoke();
        OnPropertyChanged(propertyName);
        return true;
    }

    #region INotifyPropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        var changed = PropertyChanged;
        if (changed == null)
            return;

        changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    #endregion
}

标签: c#inotifypropertychanged

解决方案


这个SetProperty方法的返回值表明它是否有效地改变了它的底层支持字段。

IsBusy实现不使用 的返回值SetProperty,但在可以访问此受保护的 SetProperty 方法的派生类中,其返回值可用于执行其他专门任务。

顺便说一句,我实际上没想到这个BaseViewModel类有一个IsBusy带有公共设置器的属性。就像现在一样,外界可以确定一个BaseViewModel实例是否忙。在我看来,这有点奇怪。


推荐阅读