栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

实现INotifyPropertyChanged-是否存在更好的方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实现INotifyPropertyChanged-是否存在更好的方法?

在不使用postsharp之类的情况下,我使用的最低版本使用的是:

public class data: INotifyPropertyChanged{    // boiler-plate    public event PropertyChangedEventHandler PropertyChanged;    protected virtual void onPropertyChanged(string propertyName)    {        PropertyChangedEventHandler handler = PropertyChanged;        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));    }    protected bool SetField<T>(ref T field, T value, string propertyName)    {        if (EqualityComparer<T>.Default.Equals(field, value)) return false;        field = value;        onPropertyChanged(propertyName);        return true;    }    // props    private string name;    public string Name    {        get { return name; }        set { SetField(ref name, value, "Name"); }    }}

那么每个属性就像:

    private string name;    public string Name    {        get { return name; }        set { SetField(ref name, value, "Name"); }    }

这不是很大;如果需要,它也可以用作基类。在

bool
从回
SetField
告诉你,如果它是一个空操作,如果你想申请其他逻辑。


甚至更容易使用C#5:

protected bool SetField<T>(ref T field, T value,    [CallerMemberName] string propertyName = null){...}

可以这样称呼:

set { SetField(ref name, value); }

编译器将使用它

"Name"
自动添加。


C#6.0使实现更容易:

protected void onPropertyChanged([CallerMemberName] string propertyName = null){    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}

…现在使用C#7:

protected void onPropertyChanged(string propertyName)   => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));protected bool SetField<T>(ref T field, T value,[CallerMemberName] string propertyName =  null){    if (EqualityComparer<T>.Default.Equals(field, value)) return false;    field = value;    onPropertyChanged(propertyName);    return true;}private string name;public string Name{    get => name;    set => SetField(ref name, value);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568607.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号