当前位置:  开发笔记 > 后端 > 正文

VBScript中的重载构造函数

如何解决《VBScript中的重载构造函数》经验,为你挑选了2个好方法。

我找到了一种在VBScript中扩展类的方法,但有没有办法传入参数或重载构造函数?我目前正在使用Init函数来初始化属性,但是我希望能够在创建对象时执行此操作.
这是我的示例类:

Class Test
    Private strText

    Public Property Get Text
        Text = strText
    End Property

    Public Property Let Text(strIn)
        strText = strIn
    End Property

    Private Sub Class_Initialize()  
        Init
    End Sub  

    Private Sub Class_Terminate()   

    End Sub 

    Private Function Init
        strText = "Start Text"
    End Function    
End Class

我创造了它

Set objTest = New Test

但是想做这样的事情

Set objTest = New Test(strInitText)

这是可能的,还是必须在两个setps中创建和初始化对象?



1> jammus..:

只是稍微改变一下svinto的方法......

Class Test
  Private m_s
  Public Default Function Init(s)
    m_s = s
    Set Init = Me
  End Function
  Public Function Hello()
    Hello = m_s
  End Function
End Class

Dim o : Set o = (New Test)("hello world")

我是怎么做的 可悲的是,没有超负荷.

[编辑]虽然如果你真的想要你可以做这样的事......

Class Test
    Private m_s
    Private m_i

    Public Default Function Init(parameters)
         Select Case UBound(parameters)
             Case 0
                Set Init = InitOneParam(parameters(0))
             Case 1
                Set Init = InitTwoParam(parameters(0), parameters(1))
             Else Case
                Set Init = Me
         End Select
    End Function

    Private Function InitOneParam(parameter1)
        If TypeName(parameter1) = "String" Then
            m_s = parameter1
        Else
            m_i = parameter1
        End If
        Set InitOneParam = Me
    End Function

    Private Function InitTwoParam(parameter1, parameter2)
        m_s = parameter1
        m_i = parameter2
        Set InitTwoParam = Me
    End Function
End Class

这给了施工人员......

Test()
Test(string)
Test(integer)
Test(string, integer)

你可以称之为:

Dim o : Set o = (New Test)(Array())
Dim o : Set o = (New Test)(Array("Hello World"))
Dim o : Set o = (New Test)(Array(1024))
Dim o : Set o = (New Test)(Array("Hello World", 1024))

虽然有点痛苦.


如果显式调用`Init`(例如`Set o = New Test.Init("hello world")`则不需要括号.不幸的是,默认函数技巧不起作用,所以是 - 在这种情况下需要括号.
这是2011年,我都搜索了这个,并喜欢学习它.我喜欢重构旧的VBScript,就像我喜欢老式的486运行一样.我不知道.

2> svinto..:

您可以通过让Init函数返回对象本身来解决它...

Class Test
  Private m_s
  Public Function Init(s)
    m_s = s
    Set Init = Me
  End Function
  Public Function Hello()
    Hello = m_s
  End Function
End Class

Dim o
Set o = (New Test).Init("hello world")
Echo o.Hello

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有