VBA技术问询:如何让Elements类成员Boards对象访问Elements类变量
解决Boards类访问Elements私有成员的问题
要实现Boards对象访问Elements类的m_length和m_width,核心是通过公开访问接口或双向实例引用打破私有成员的访问限制,以下是具体实现方案:
方案一:父类引用+公开属性实现
1. 修改Elements类
在Elements类中,将私有长度、宽度字段封装为公开只读属性,并在初始化Boards时传递自身实例给Boards:
' Elements 类代码 Private m_length As Double Private m_width As Double Private m_thickness As Double Private m_board As Boards Private Sub Class_Initialize() Set m_board = New Boards ' 将当前Elements实例传递给Boards对象 Set m_board.ParentElement = Me End Sub ' 暴露m_length的只读访问接口 Property Get Length() As Double Length = m_length End Property ' 暴露m_width的只读访问接口 Property Get Width() As Double Width = m_width End Property ' (可选)如果需要修改长度/宽度,添加赋值属性 Property Let Length(value As Double) m_length = value End Property Property Let Width(value As Double) m_width = value End Property ' (可选)提供直接访问Boards对象的属性 Property Get Board() As Boards Set Board = m_board End Property
2. 修改Boards类
在Boards类中添加私有变量保存Elements实例引用,并通过该引用访问公开的Length和Width属性计算面积:
' Boards 类代码 Private m_parentElement As Elements ' 用于接收Elements实例的属性 Property Set ParentElement(value As Elements) Set m_parentElement = value End Property Property Get Area() As Double ' 通过父元素引用访问公开属性计算面积 If Not m_parentElement Is Nothing Then Area = m_parentElement.Length * m_parentElement.Width Else Area = 0 ' 处理未设置父元素的异常情况 End If End Property
方案二:Elements类直接提供面积计算(简化版)
如果不需要Boards类独立计算面积,也可以在Elements类中直接实现面积逻辑,Boards类按需调用:
' Elements 类新增代码 Property Get BoardArea() As Double BoardArea = m_length * m_width End Property ' Boards 类修改代码 Private m_parentElement As Elements Property Set ParentElement(value As Elements) Set m_parentElement = value End Property Property Get Area() As Double Area = m_parentElement.BoardArea End Property
关键说明
- 类的私有成员(如
m_length、m_width)仅能被自身类访问,外部类必须通过公开的Property Get/Let/Set接口才能获取或修改。 - 通过传递父类实例引用,Boards类可以安全访问Elements类暴露的公开属性,既保证封装性,又满足访问需求。
内容的提问来源于stack exchange,提问作者M Sz
相关产品推荐
相关产品推荐

