在 C# 中,我知道我可以通过在类的主体中指定它来重载类的构造函数:
public class MyClass()
{
public MyClass(String s) { ... }
}
这会覆盖默认构造函数(没有参数)并强制使用参数 s 初始化类。
我知道在 VBA 中我可以用 Private Sub Class_Initialize()
初始化我的类,但我不知道是否有办法强制我的类用参数初始化。这能做到吗?
最佳答案
正如 Jtolle 指出的那样,这在 VBA/VB6 中根本不可能。没有完美的方法来解决这个问题,但是,我个人做的是创建一个 Public/Friend 子调用初始化我想要的参数(在 VBA/VB6 中你使用“可选”参数进行重载)然后快速检查如果您尝试在不运行 initialize 方法的情况下 Access 它们,则会抛出异常的类的所有公开成员。一个基本示例可能如下所示:
Option Explicit
Private m_blnInitialized As Boolean
Private m_lngID As Long
Private m_strFirstName As String
Public Sub Initialize(ByVal ID As Long, Optional ByVal someOtherThing As String = vbNullString)
If m_blnInitialized Then Me.Clear
m_lngID = ID
m_strFirstName = SomeLookUp()
If LenB(someOtherThing) Then
''Do something here.
End If
m_blnInitialized = True
End Sub
Public Property Get ID() As Long
If Not m_blnInitialized Then Err.Raise eStandardErrors.eNotInitialized
ID = m_lngID
End Property
Public Property Get FirstName() As String
If Not m_blnInitialized Then Err.Raise eStandardErrors.eNotInitialized
FirstName = m_strFirstName
End Property
Private Function SomeLookUp() As String
''perform magic on Me.ID
End Function
Public Sub LoadPicture()
If Not m_blnInitialized Then Err.Raise eStandardErrors.eNotInitialized
''More magic
End Sub
Public Sub Clear()
If Not m_blnInitialized Then Err.Raise eStandardErrors.eNotInitialized
m_strFirstName = vbNullString
m_lngID = 0&
m_blnInitialized = False
End Sub
它不是很好,但它与使用 VBA/VB6 时一样好。
关于c# - 有没有办法在 VBA 中重载类的构造函数/初始化过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1731052/