vba - 如何在 Access/VBA 中将当前对象作为参数传递
问题描述
我正在尝试将观察者模式付诸实践,如提供的代码中所示。
Subject、Observer和DisplayElement是接口类 。CurrentConditionsDisplay类实现了Observer和DisplayElement,因此它可以从WeatherData类进行更新。由于 VBA 不支持带参数的构造函数,因此我创建了一个 sub 以保存 weatherData 对象并使用它来注册CURRENT OBJECT。我使用Me传递当前对象。
当我运行主代码(WeatherStation )时,当我将Me作为参数(weatherData.registerObserver (Me) )传递时,运行时错误 438 就出现了。
我很感激任何帮助。
观察者界面:
Option Compare Database
Option Explicit
Public Sub update(temperature As Double, humidity As Double, pressure As Double)
End Sub
主题界面:
Option Compare Database
Option Explicit
Public Sub registerObserver(o As Observer)
End Sub
Public Sub removeObserver(o As Observer)
End Sub
Public Sub notifyObservers()
End Sub
显示元素接口:
Option Compare Database
Option Explicit
Public Sub display()
End Sub
天气数据子类:
Option Compare Database
Option Explicit
Implements Subject
Private m_observers As New Scripting.Dictionary
Private m_temperature As Double
Private m_humidity As Double
Private m_pressure As Double
Public Sub Subject_registerObserver(o As Observer)
m_observers.Add o, o
End Sub
Public Sub Subject_removeObserver(o As Observer)
If (m_observers.Exists(o)) Then
m_observers.Remove (o)
End If
End Sub
Public Sub Subject_notifyObservers()
Dim i As Long
Dim objeto As Observer
For i = 0 To m_observers.Count - 1
Set objeto = m_observers.Items(i)
objeto.update m_temperature, m_humidity, m_pressure
Next i
End Sub
Public Sub measurementsChanged()
Call Subject_notifyObservers
End Sub
Public Sub setMeasurements(temperature As Double, humidity As Double, pressure As Double)
m_temperature = temperature
m_humidity = humidity
m_pressure = pressure
Call measurementsChanged
End Sub
CurrentConditionsDisplay 子类:
Option Compare Database
Option Explicit
Implements Observer
Implements DisplayElement
Private m_temperature As Double
Private m_humidity As Double
Private m_weatherData As Subject
Public Sub CurrentConditionsDisplay(weatherData As Subject)
Set m_weatherData = weatherData
weatherData.registerObserver (Me)
End Sub
Public Sub Observer_update(temperature As Double, humidity As Double, pressure As Double)
m_temperature = temperature
m_humidity = humidity
Call DisplayElement_display
End Sub
Public Sub DisplayElement_display()
Debug.Print ("Current conditions: " + m_temperature + "F degrees and " + m_humidity + "% humidity")
End Sub
气象站主要代码:
Option Compare Database
Option Explicit
Public Function WeatherStation()
Dim wData As New weatherData
Dim currentDisplay As New CurrentConditionsDisplay
Call currentDisplay.CurrentConditionsDisplay(wData)
Call wData.setMeasurements(80, 65, 30.4)
End Function
解决方案
推荐阅读
- reactjs - 未找到 reactjs node_modules
- vue.js - Vue - 如何在 v-model 和 v-for 中使用 Getter / Setting
- java - java JDBC中使用preparestatement的占位符
- java - JScrollPane 的内容不可见
- typescript - 通过 Firebase Cloud Functions 使用用户 ID 作为文档 ID 创建用户配置文件?
- firebase - Flutter + Firebase:如何发送电子邮件验证
- java - 使用 Java 中的方法按比率从最低到最高对数组进行排序
- flutter - 如何使这种延迟加载滚动与提供程序一起使用
- string - 在 Powershell 中处理字符串
- django - Django Allauth 中的 PasswordResetView 引发无效查找错误