设置Elbow属性时应用程序崩溃,求事件相关代码错误排查
问题1:Elbow属性无限递归导致栈溢出崩溃
你当前写的Elbow属性没有私有后备字段存储实际值,get访问器return Elbow和set访问器Elbow = value的写法都会反复调用属性自身的访问器,形成死循环,最终触发栈溢出导致程序直接崩溃。
正确写法需要新增私有字段存储属性值,示例如下:
// 新增私有后备字段存实际值 private XYZ _elbow; public XYZ Elbow { get { return _elbow; } set { // 可选优化:只有值发生变化时才更新+触发事件,减少不必要的执行逻辑 if(_elbow != value) { _elbow = value; // 事件调用前判空,避免空引用异常 ElbowModified?.Invoke(this, EventArgs.Empty); } } }
问题2:事件调用未做空值判断
如果ElbowModified事件没有任何订阅者,直接调用Invoke方法会抛出NullReferenceException空引用异常。上述示例里用空条件运算符?.处理了这个问题,仅当事件存在订阅者时才会执行触发逻辑。
另外事件触发时第一个参数规范为事件发送方的实例,原来传的0不符合常规事件设计规范,建议替换为this。
其他注意点
你贴出的代码里还订阅了BoundingBoxModified事件,如果实际代码中没有定义这个事件,会出现编译错误,需要补充定义。
内容的提问来源于stack exchange,提问作者user8630414
相关产品推荐
相关产品推荐

