如何从dhSkuList类更新dhOrder类的属性?
一、调整
dhSkuList.UpdateDSFee过程以更新dhOrder属性 要实现dhSkuList修改所属dhOrder的属性,核心是让dhSkuList持有对应dhOrder的对象引用,具体步骤如下:
1. 在dhSkuList类中添加私有引用变量
' dhSkuList类模块 Private m_parentOrder As dhOrder ' 存储当前SKU所属的订单对象
2. 添加引用传递的入口
可以通过构造函数初始化时传入,或通过属性设置:
' 构造函数方式(创建SKU实例时绑定订单) Public Sub Initialize(parentOrder As dhOrder) Set m_parentOrder = parentOrder End Sub ' 或属性设置方式 Public Property Set ParentOrder(obj As dhOrder) Set m_parentOrder = obj End Property Public Property Get ParentOrder() As dhOrder Set ParentOrder = m_parentOrder End Property
3. 修改UpdateDSFee过程,同步更新dhOrder属性
保留原有自身属性更新逻辑的同时,加入对dhOrder属性的操作:
Public Sub UpdateDSFee() Dim skuSuffix As String skuSuffix = Right(Me.SKU, 1) ' 假设SKU是dhSkuList的公共属性 ' --- 原有自身属性更新逻辑(保留)--- ' Me.SomeProperty = ... 你的原有代码 ' --- 更新dhOrder对应属性 --- If Not m_parentOrder Is Nothing Then Select Case skuSuffix Case "F" m_parentOrder.dsF = m_parentOrder.dsF + 1 Case "S" ' 示例其他后缀场景 m_parentOrder.dsS = m_parentOrder.dsS + 1 ' 可扩展其他后缀的判断逻辑 End Select End If End Sub
4. 绑定dhSkuList与dhOrder实例
在创建SKU项时,将所属订单传递给dhSkuList,比如在dhOrder的添加SKU方法中:
' dhOrder类模块示例代码 Private m_skuCollection As Collection Public Sub AddSku(newSku As dhSkuList) Set newSku.ParentOrder = Me ' 或调用newSku.Initialize Me m_skuCollection.Add newSku End Sub
二、私有变量的正确性与必要性分析
必要性
- 封装性保障:私有变量是类封装的核心,避免外部直接修改内部状态,确保属性修改只能通过类提供的公共方法/属性完成,维持数据逻辑的一致性。比如
dhOrder的dsF属性,若直接暴露变量,外部可能随意赋值破坏订单统计逻辑,通过私有变量+公共属性的方式可加入验证逻辑。 - 代码可维护性:统一前缀(如
m_)的私有变量便于识别内部状态,修改内部实现时不会影响外部调用的接口。 - 数据安全:对于对象引用类的私有变量(如
m_parentOrder),可以在类销毁时手动释放,避免内存泄漏。
正确性检查要点
- 命名规范:建议用
m_前缀区分私有变量与公共属性,避免命名冲突,示例:' dhOrder类模块正确写法 Private m_dsF As Integer Public Property Get dsF() As Integer dsF = m_dsF End Property Public Property Let dsF(value As Integer) ' 加入合法性验证,比如禁止负数 If value >= 0 Then m_dsF = value End Property - 冗余性排查:若私有变量无对应的公共操作接口,且仅在类内部临时使用,需确认是否为必要状态;长期存储的私有变量需确保有合理的初始化与更新逻辑。
- 对象引用释放:持有其他对象的私有变量,需在
Class_Terminate事件中释放,示例:' dhSkuList类模块 Private Sub Class_Terminate() Set m_parentOrder = Nothing End Sub
内容的提问来源于stack exchange,提问作者Eli Greenberg
相关产品推荐
相关产品推荐

