说到get,C#有什么捷径吗?并设置;哪个调用onPropertyChanged?

我有这段代码用于在我的应用程序中设置属性:


string _backgroundColor;

public string BackgroundColor

{

    get => _backgroundColor;

    set => SetProperty(ref _backgroundColor, value);

}


public class ObservableObject : INotifyPropertyChanged

{

    protected virtual 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;

     }


     public event PropertyChangedEventHandler PropertyChanged;

     protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = "") =>

            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

}

我记得读过一些关于我可以在 C# 中使用 { get; 的地方。放; }. 有什么办法可以在这种情况下使用它,这样我就不必自己继续声明局部变量了吗?


江户川乱折腾
浏览 134回答 2
2回答

桃花长相依

您的代码已经显示了实现 INotifyPropertyChanged 的类中属性的典型快捷方式。使用普通的 C# 没有更短的方法。如果你只使用 {get;set;} 你就失去了在 getter 和 setter 中调用任何东西的可能性。如果您只是想自动添加 PropertyChanged 调用(并失去对它的一些控制),您可以查看面向方面的编程,例如使用PostSharp(商业)或Fody(开源)。这些工具在编译时/之后修改您的代码,并允许规则修改您的代码。

猛跑小猪

我看到了使用 PostSharp 的 [NotifyPropertyChanged] 的建议,我的责任是提及一个更好的免费替代方案:Stepen Cleary 的计算属性。 https://github.com/StephenCleary/CalculatedProperties/blob/master/README.md说明:Postsharp 确实允许您编写简短的格式,即string { get; set; }&nbsp;&nbsp;和火灾通知。这是计算属性的唯一优势,它们更冗长,但您仍然不需要支持字段:{&nbsp; &nbsp; get { return Property.Get(string.Empty); }&nbsp; &nbsp; set { Property.Set(value); }}您很快就会发现,尽管输入的数量是一个小问题,但主要的挑战是依赖于其他属性的属性,这就是 CalculatedProperties 在所有方面击败 PostSharp 的地方。来自 PostSharp 文档:“如果属性 getter 从其类或委托中调用虚拟方法,或引用另一个对象的属性(不使用规范形式 this.field.Property),PostSharp 将生成错误,因为它无法在构建时解析此类依赖项. 当您的属性 getter 包含复杂的数据流,例如循环,或调用其他类的方法(属性 getter 除外)时,同样的限制适用。发生这种情况时,您可以重构代码,以便 PostSharp 自动分析,或者你可以接管分析代码的责任”这些限制均不适用于计算属性。它可以执行循环、虚拟方法、LINQ 到对象,基本上任何您可以想象的疯狂运行时依赖关系都无关紧要,依赖关系图在运行时重新连接自身,并且无需任何仪式即可工作。它们也更快且免费。
打开App,查看更多内容
随时随地看视频慕课网APP