理解Action<int>订阅:+=运算符的作用是什么?
问题解答
你的猜测完全正确:当Count变量发生变化时,CountChanged这个Action会被触发,同时把新的Count值作为参数传递给所有订阅它的委托逻辑。这里你没用到newCount参数只是因为当前场景只需要触发Blazor组件的状态更新(StateHasChanged()),不影响订阅本身的有效性。
关于+=的作用,得从C#委托的特性说起:
Action<int>本质是泛型委托类型,委托支持多播——也就是一个委托实例可以绑定多个方法或匿名函数。+=操作符的核心作用就是给CountChanged委托添加一个新的订阅者:把后面的匿名函数(newCount) => this.StateHasChanged()注册到委托的调用链中。- 当
CountChanged被调用(通常是在Count属性的setter里执行CountChanged?.Invoke(newCount))时,所有通过+=绑定的逻辑都会被依次执行。
举个实际场景的例子,如果你之后想在Count变化时同时打日志,直接再加一行订阅代码就行:
this.data.CountChanged += (newCount) => Console.WriteLine($"Count已更新为:{newCount}");
这样每次Count变动,会先触发组件状态更新,再输出日志,这就是委托多播的优势。
最后提醒一句:在Blazor组件里,订阅外部对象的事件后,记得在组件销毁时用-=取消订阅,避免内存泄漏:
protected override void OnDispose() { this.data.CountChanged -= (newCount) => this.StateHasChanged(); base.OnDispose(); }
内容的提问来源于stack exchange,提问作者Musaffar Patel
相关产品推荐
相关产品推荐

