我想知道是否有一种方法可以在不同类模块的实例之间共享变量?
我有两个班级:
Class 1
Class 2
在类1中,我有多个全局变量,我希望Class 2
在实例化后可以访问。
我可以使用每个变量的get和set属性,但我有大约40/50,所以它看起来有点单调乏味。
所以,相反,我正在尝试使用set属性将Class 1
的当前实例传递给Class 2
。
我创建了一个最小的例子来说明我目前的努力:
第1课:
Public test As String
Private Sub Class_Initialize()
Call setTest
Dim b As Class2
Set b = New Class2
End Sub
Public Property Set Classed(ByRef vClass As Class1)
Set vClass = Me
End Property
Public Sub setTest(t As String)
test = "Sam"
End Sub
第2课:
Private Sub Class_Initialize()
Dim newClass As Class1
newClass.Classed = newClass
' Want to be able to access the test String from class 1
End Sub
显然我现在正在做的事情是不正确的,所以我想知道是否有人可以指出我出错的地方并告诉我如何实现这个课程分享?
添加:运行代码时,我收到了一行编译错误:
newClass.Classed = newClass
。错误:无效使用属性
答案 0 :(得分:0)
不太确定,但我感觉你的例子中有点Circular Reference?
什么是循环引用?
当两个对象彼此保持引用时,就会发生循环引用。
您可以通过在类中公开Dictionary对象来尝试替代方案,其中 Key 将是您的“变量名称”, Value 将保存实际值
一个例子可能是:
<强>的Class1 强>
Option Explicit
Private mList As Object
Public Property Get List() As Object
Set List = mList
End Property
Private Sub Class_Initialize()
Set mList = CreateObject("Scripting.Dictionary")
End Sub
Private Sub Class_Terminate()
Set mList = Nothing
End Sub
<强>实施强>
Sub ClassTest()
Dim a As Class1
Set a = New Class1
Dim b As Class1
Set b = New Class1
a.List("VarName") = "Sam" 'Set
b.List("VarName") = a.List("VarName") 'Get / Set
Debug.Print b.List("VarName") 'Get
Set a = Nothing
Set b = Nothing
End Sub
'Output
'Sam