一、需求:
为了实现一个动态指标监控系统,需设计一个Number类,Number 类具备可监控值变化的能力。
Number类包含一个真值TrueValue,一个Changed事件,以及相应的方法。
Number类的实例n既可以直接定义为一个数值,又可以等于n1+n2,或者等于n1*n2,或者等于n3,或者等于n1+n2*n3等计算结果
期望达到n在定义后,任何赋值、或者参数的变化都能够触动n的changed事件
即能够监控n的所有直接的变化,也能监控间接的变化。
为了实现计算,我已经对Number重写+,-,*,/等于运算操作符
二、发生的问题:
假设按此顺序执行:
Number n = new Number(1);
n.Changed += n_Changed;
n = n1+n2;
那么此时n会丢失已经注册的Changed事件,因为=无法重写,n1+n2 计算出来的新的Number nx 已经将 n覆盖掉。
但C#赋值操作符无法重载,无法将n已经注册的changed事件赋值给nx。
三、请问,如优雅的实现赋值操作符 = 的重载?
以实现可以将n 已经注册的changed事件赋值给nx,实现n = 一个新值时, 能够触动n已经注册的Changed事件?
比如:=运算符是否有相应的函数可以重写?
当然我可以先取出n的Changed 事件,再赋值给nx,但这不优雅。