请教:我的C# INotifyPropertyChanged实现是否合规?
自定义INotifyPropertyChanged实现的可行性确认
我编写了一段C#代码(如下),尽管老师要求必须使用她提供的解决方案,但我的INotifyPropertyChanged实现顺序和老师的不同,还有一些细微修改,想确认这个实现是否可行。
namespace ViewModel { public class VMMannschaft : INotifyPropertyChanged { private Mannschaft mannschaft; public VMMannschaft(string nation) { mannschaft = new Mannschaft(nation); } public string Nation { get => mannschaft.Nation; } public int Spiele { get => mannschaft.Spiele; } public int Punkte { get => mannschaft.Punkte; } public void Sieg() { mannschaft.Sieg(); OnPropertyChanged("Punkte"); OnPropertyChanged("Spiele"); } public void Niederlage() { mannschaft.Niederlage(); OnPropertyChanged("Punkte"); OnPropertyChanged("Spiele"); } public void Unentschieden() { mannschaft.Unentschieden(); OnPropertyChanged("Punkte"); OnPropertyChanged("Spiele"); } public Mannschaft Mannschaft { get => mannschaft; private set => mannschaft = value; } public event PropertyChangedEventHandler? PropertyChanged; public void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public override string ToString() { return Nation; } } }
可行性分析
你的实现完全符合
INotifyPropertyChanged接口规范,功能上是可行的:- 正确声明了
PropertyChanged事件,满足接口强制要求 OnPropertyChanged方法逻辑正确,通过空值传播运算符避免空引用异常,能正常触发属性变更通知- 每次修改底层
Mannschaft实例状态后,都及时通知了Punkte和Spiele的变更,确保依赖这些属性的UI或逻辑能同步更新 - 所有属性的getter都正确委托给底层
Mannschaft实例的对应属性,数据传递逻辑清晰
- 正确声明了
关于实现顺序的差异:C#对类成员的定义顺序没有强制要求,只要接口的所有成员都正确实现,方法、事件的位置不同不会影响代码功能。
小优化建议
- 用
nameof替代硬编码的属性名,比如OnPropertyChanged(nameof(Punkte)),这样能避免拼写错误,后续重构属性名时也能自动同步修改 - 如果底层的
Mannschaft类也实现了INotifyPropertyChanged,可以直接订阅它的PropertyChanged事件,在事件处理方法中转发变更通知,这样就不用在每个操作方法里手动调用OnPropertyChanged了
内容的提问来源于stack exchange,提问作者Elivondreli
相关产品推荐
相关产品推荐

