You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教:我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 16:44:52