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

如何从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),可以在类销毁时手动释放,避免内存泄漏。

正确性检查要点

  1. 命名规范:建议用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
    
  2. 冗余性排查:若私有变量无对应的公共操作接口,且仅在类内部临时使用,需确认是否为必要状态;长期存储的私有变量需确保有合理的初始化与更新逻辑。
  3. 对象引用释放:持有其他对象的私有变量,需在Class_Terminate事件中释放,示例:
    ' dhSkuList类模块
    Private Sub Class_Terminate()
        Set m_parentOrder = Nothing
    End Sub
    

内容的提问来源于stack exchange,提问作者Eli Greenberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:52:25