c# - 有没有办法在 VBA 中重载类的构造函数/初始化过程?

标签 c# excel ms-access oop vba

在 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/

相关文章:

c# - RibbonDropDown 丢失项目

excel - 如何通过 VBA 识别 UNIX 文本文件中的隐藏回车符?

sql-server - 将数据从 MS Access 同步到 MS SQL

sql - 一个字段中的值作为从同一表中查找

c# - 在 Nhibernate QueryOver 中使用计算属性(未映射)

c# - 嵌套尝试/捕捉

c# - 这个 linq 会显示最新日期的对象吗?

excel - 在 Excel 中复制范围时,PasteSpecial 不保留源格式

c - 是否有使用 C 读取 Excel 文件的 FOSS 库

sql - 微软 Access : searching a column for a star/asterisk